Неизвестная опция: -o Не удалось создать виртуальную машину Java.

У меня возникает необычная ошибка сборки при использовании Buildroot для создания образа для моего Phidget SBC. Это необычно, потому что это происходит ТОЛЬКО на моем ноутбуке для разработки, а НЕ на моем обычном ноутбуке, хотя я использую ТОЧНО ту же среду Builroot, что и опубликовано самими Phidgets.

Когда я пытаюсь создать образ Buildroot, я получаю следующую ошибку при попытке скомпилировать путь к классам GNU:

Making all in tools
make[2]: Entering directory `/home/xxxx/buildroot_phidgetsbc/buildroot-phidgetsbc_1.0.4.20111028/output/build/classpath-0.98/tools'
/bin/mkdir -p classes asm 
/bin/mkdir -p ../tools/generated/gnu/classpath/tools/gjdoc/expr
java -classpath  antlr.Tool -o ../tools/generated/gnu/classpath/tools/gjdoc/expr/ \
      ./gnu/classpath/tools/gjdoc/expr/java-expression.g

Unrecognized option: -o
Could not create the Java virtual machine.
make[2]: *** [tools.zip] Error 1

Единственная разница, о которой я могу сказать, это разные версии Linux (Ubuntu), которые я использую на каждом ноутбуке. Также я не могу найти параметр -o, задокументированный для Java, и не понимаю, почему он работает на одном ноутбуке, а не на другом.

Любые предложения будут полезны.

** ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ **

Я взглянул на Makefile и вот, что я думаю, соответствующие строки:

ANTLR = java -classpath antlr.Tool...

#Чтобы сгенерировать пример zip, просто используйте исходники и игнорируйте #файлы классов. Всегда регенерируйте все файлы .class и немедленно удаляйте их. И скопируйте файлы шаблонов, которые мы используем, в директорию классов #, чтобы они также были включены.

$(TOOLS_ZIP): $(ALL_TOOLS_FILES)

@rm -rf классы asm /bin/mkdir -p классы asm /bin/mkdir -p $(gjdoc_gendir)/gnu/classpath/tools/gjdoc/expr
$(ANTLR) -o $(gjdoc_gendir)/gnu /classpath/tools/gjdoc/expr/ \
$(srcdir)/gnu/classpath/tools/gjdoc/expr/java-expression.g

Вы можете видеть, где строка «проблема» встречается в последней приведенной выше строке.

** ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ 2 И РЕШЕННАЯ ПРОБЛЕМА **

Я проверил Makefile на своей «обычной» машине, и он отличается от моего ноутбука «для разработки». У меня «antlr» установлен на моей «обычной» машине, тогда как на моей разработке его не было. Я предполагаю, что когда ./configure был запущен, он уловил это и изменил команду antlr, чтобы она подходила, за исключением того, что на моей машине разработки она создала ошибочную альтернативу. Для справки, мой «обычный», т.е. рабочий make-файл:

ANTLR = runantlr ANTLR_JAR = /usr/share/java/antlr.jar

Установка antlr на моем компьютере для разработки решила проблему.

Спасибо за помощь


person D-Dᴙum    schedule 12.11.2011    source источник


Ответы (1)


Я думаю, что проблема в этой строке заключается в параметре -classpath, который интерпретирует antlr.Tool как путь к классу, а затем пытается проанализировать параметр -o.

Опция -o — это опция командной строки org.antlr.Tool, а не опция JVM.

Правильный способ запустить инструмент antlr:

java org.antlr.Tool [options]

Мне любопытно, как выглядит эта строка выполнения на машине, которая работает. Потому что тот, который вы показали мне в вашем посте, определенно неверен.

person Strelok    schedule 12.11.2011
comment
+1. Я думаю ты прав. Видите два пробела между -classpath и antlr.Tool? Держу пари, что там какая-то переменная расширяется, и по какой-то причине переменная пуста/не определена. То есть вместо java -classpath[space]VARIABLE[space]antlr.Tool ... стоит просто java -classpath[space][space]antlr.Tool ..., вызывая описанную вами проблему. - person ruakh; 12.11.2011
comment
@ruakh, да, я думаю, ты прав, это второе пространство определенно выглядит подозрительно. Я думаю, что если Керубу сможет показать нам эту строку журнала с работающей машины, это покажет, что не так. - person Strelok; 12.11.2011
comment
Спасибо Стрелок. У меня не было возможности проверить два Buildroot, но я процитировал соответствующие строки Makefile с машины «ptoblem», и это выглядит неверным, как вы предлагаете. Почему это будет работать на одной машине, а не на другой, остается загадкой, но я буду исследовать и сообщать об этом дальше. - person D-Dᴙum; 12.11.2011
comment
Как сказал руах, вероятно, есть переменная среды, которая не расширяется должным образом. Увидите ту строчку с машины, которая работает, и проблема выявится. - person Strelok; 12.11.2011
comment
Я в тупике, почему на 2 машинах будет по другому. Но не могли бы вы попробовать изменить в make-файле строку для ANTLR на ANTLR = java org.antlr.Tool и посмотреть, что произойдет? - person Strelok; 12.11.2011
comment
Решил проблему сейчас. Makefiles действительно отличались, как я указал в дополнительной информации выше. Я не пытался изменить неправильную строку в Makefile, а вместо этого установил отсутствующий пакет antlr. Спасибо за вашу помощь - person D-Dᴙum; 12.11.2011