Я не слишком знаком с компиляцией для C, поэтому, если я не даю достаточно информации, дайте мне знать, что вам нужно, чтобы я опубликовал!
Вот резюме: мне нужно запустить ANTLR на целевом языке C на несколько старом компьютере IBM AIX. Я быстро отказался от компиляции с помощью утилит IBM CC/make и установил на машину версию gcc (4.2) и GNU make. Проблема в том, что хотя скрипт configure определяет правильную архитектуру, похоже, он не отвечает должным образом.
Конкретная версия ANTLR, которую я использую, — это версия 3.2, цель C. Фактическая обнаруженная цель: powerpc-ibm-aix-5.3.0.0.
Вот что я сделал. Первая вопиющая ошибка, которую я вижу, заключается в том, что он добавил к параметрам флаг «-m32». Хорошо, я могу достаточно просто удалить это из make-файла, и в этом случае gcc по умолчанию должен иметь значение -maix32.
Вторая проблема: я получаю сообщение об ошибке, указывающее мне путь к stdio.h и говорящее «ошибка: дубликат« неподписанный »». Итак, configure сделал оператор «define» в автоматически сгенерированном файле antlr3config.h... Я могу это прокомментировать, и ошибка исчезнет.
Третий вопрос... здесь я застрял.
/opt/freeware/bin/make all-am
make[1]: Entering directory `/scrubber/libantlr3c-3.2'
if /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -Iinclude -O2 -Wall -MT antlr3baserecognizer.lo -MD -MP -MF ".deps/antlr3baserecognizer.Tpo" -c -o antlr3baserecognizer.lo `test -f 'src/antlr3baserecognizer.c' || echo './'`src/antlr3baserecognizer.c; \
then mv -f ".deps/antlr3baserecognizer.Tpo" ".deps/antlr3baserecognizer.Plo"; else rm -f ".deps/antlr3baserecognizer.Tpo"; exit 1; fi
gcc -DHAVE_CONFIG_H -I. -I. -I. -Iinclude -O2 -Wall -MT antlr3baserecognizer.lo -MD -MP -MF .deps/antlr3baserecognizer.Tpo -c src/antlr3baserecognizer.c -o antlr3baserecognizer.o
In file included from include/antlr3baserecognizer.h:39,
from src/antlr3baserecognizer.c:9:
include/antlr3defs.h:343: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ANTLR3_SALENT'
make[1]: *** [antlr3baserecognizer.lo] Error 1
make[1]: Leaving directory `/scrubber/libantlr3c-3.2'
make: *** [all] Error 2
Вот ссылка на конкретный файл antlr3defs.c, включенный в библиотеку ANTLR: https://docs.google.com/file/d/0B9XS1f8YfyB4cFJRZTdWM1pMWWs/edit?usp=sharing
О, и я могу скомпилировать его на других платформах, таких как Ubuntu или Cygwin (хотя я не могу использовать их для этой задачи). Хотя я не совсем знаком с AIX и имею ограниченный опыт компиляции программ на C. Возможно, мне нужно установить некоторые вещи с помощью скрипта конфигурации?
Спасибо!
РЕДАКТИРОВАТЬ: Достигнут прогресс, поэтому обновите этот пост, чтобы сохранить информацию вместе.
Я смог устранить указанную выше ошибку, добавив параметр --disable-abiflags при запуске сценария настройки... этот параметр удаляет флаги -m32 и -m64 gcc. Это позволяло скрипту configure работать корректно, но приводило ассемблер в замешательство при запуске make. Чтобы дать ему руководство, я добавил флаг -Wa,-a32 в CFLAFS в Makefile, тем самым сообщив ассемблеру, что мне нужна 32-битная версия.
Оставалась только одна проблема.
ar cru .libs/libantlr3c.a antlr3baserecognizer.o antlr3basetree.o antlr3basetreeadaptor.o antlr3bitset.o antlr3collections.o antlr3commontoken.o antlr3commontree.o antlr3commontreeadaptor.o antlr3commontreenodestream.o antlr3convertutf.o antlr3cyclicdfa.o antlr3debughandlers.o antlr3encodings.o antlr3exception.o antlr3filestream.o antlr3inputstream.o antlr3intstream.o antlr3lexer.o antlr3parser.o antlr3rewritestreams.o antlr3string.o antlr3stringstream.o antlr3tokenstream.o antlr3treeparser.o antlr3ucs2inputstream.o
ar: 0707-128 The OBJECT_MODE environment variable has an invalid setting.
OBJECT_MODE must be 32, 64, 32_64, d64 or any.
make[1]: *** [libantlr3c.la] Error 1
Проблема в том, что не имеет значения, что я устанавливаю. Я попытался запустить make, не установив его, а затем использовал экспорт, чтобы установить его:
export OBJECT_MODE=32
Я могу ввести echo $OBJECT_MODE, и он действительно выведет 32... но, похоже, он не обнаружит его при запуске make.
Я смог обойти это, отредактировав скрипт «libtool», добавив «-X 32» к параметрам ar, чтобы переопределить все, что он читал. Долгосрочным решением, вероятно, будет ltmain.sh и повторный запуск configure.