как создать GNU Classpath и JamVM
Вопрос
Я пытаюсь собрать GNU Classpath 0.98 и JamVM 1.5.2.
Следуя JamVM readme, я выполнил 'configure;сделать;сделайте install' на JamVM, и это сработало.
Затем я добавил jamvm и Sun javac к path.
Затем с помощью GNU Classpath я сделал это:
./configure --enable-jni --disable-gtk-peer --disable-gconf-peer --disable-plugin
Я получил эту ошибку:
Сбой javac (см. config.log)
На config.log
, я вижу, что javac не может найти VMStackWalker (который зависит от jamvm)
Я добавил классы jamvm в CLASSPATH, затем я получил эту ошибку:
Сбой виртуальной машины Java jamvm (см. config.log)
На config.log
, Я вижу , что jamvm не может найти java.lang.Class
.
Что случилось?!
Решение
Другие советы
Шаги по компиляции GNU Classpath для Ubuntu12.04:https://groups.google.com/forum /#!тема/jruby-gsoc/-fnKnP7zxbI
Шаги по компиляции JamVM для Ubuntu 12.04:https://groups.google.com/forum /#!тема/jruby-gsoc/uJ6RlVvHR-0
попробуйте ecj, для classpath нужен компилятор Java, а sun sdk, похоже, здесь не подходит
Мои приключения в Mac OS X 10.11:
ДЖАМВМ
построенный с make clean && CFLAGS="-m32" ./configure
.
Путь к классу GNU
потребовалось немного больше:
# If you already made an attempt
make clean
## If you don't --disable-tools. I didn't have antlr, so I downloaded it.
#curl -O http://www.antlr.org/download/antlr-4.5.1-complete.jar
./configure --disable-gtk-peer --disable-gconf-peer \
--disable-tools # for tools: --with-antlr-jar=antlr-4.5.1-complete.jar
Если вы make
теперь компиляция завершается неудачей с
java_io_VMConsole.c:80:19: error: use of undeclared identifier 'IUCLC'
.Я закончил тем, что погуглил, что это за символ - это восьмеричное число 01000, и добавлено оно прямо к источнику:
vim ./native/jni/java-io/java_io_VMConsole.c
# add this line in the beginning of the file: #define IUCLC 0001000
После этого ./configure продолжает жаловаться на ваш javac
не будучи GCJ.Это похоже на старую ошибку GNU Classpath, я нашел упоминания о подобных проблемах.Как вы видите ниже, ./configure
сломан и не будет работать ни с каким javac
кроме gcj
.
В итоге я просто редактировал ./configure
:
- в начале я добавил строку
export JAVAC=$(which javac)
- Я заменил условное присвоение на
JAVAC_IS_GCJ=no
Сейчас, ./configure
должно пройти, но make
не буду.
Я погладил все Makefiles
это ./configure
сгенерированный для -fsource=
, а затем либо закомментировал строки с -fsource
(это специфичный для gcj флаг), если бы существовали альтернативные строки с -source
аргумент, или просто замененный fsource
с source
.
Последний шаг, я должен был отредактировать верхний уровень Makefile
и удалить $(EXAMPLESDIR)
От SUBDIRS = ...
строка - она не скомпилировалась с ошибкой:
./gnu/classpath/examples/CORBA/NamingService/Demo.java:99: error:
package gnu.classpath.tools.tnameserv does not exist
gnu.classpath.tools.tnameserv.Main.main(args);"
Он построил!
Я получил ошибки при его запуске, но это совершенно другая история...
$ DYLD_FALLBACK_LIBRARY_PATH=/usr/local/classpath/lib/classpath \
/usr/local/jamvm/bin/jamvm -verbose:class -verbose:jni Test
...
Failed to open library /usr/local/classpath/lib/classpath/libjavanio:
dlopen(/usr/local/classpath/lib/classpath/libjavanio.so,
1): image not found]
...
Exception occurred while printing exception (java/lang/NoClassDefFoundError)...
Original exception was java/lang/UnsatisfiedLinkError
(Я обновлю ответ, если мне удастся его запустить)