Ошибка компиляции ртути с Mac OS X 10.8
У меня проблема с компиляцией Mercury на моем Mac. Я использую Mac OS X 10.8, установил Xcode 4.5, а также инструменты командной строки.
Что я сделал до сих пор:
Я скачал файл tar.gz, распаковал его, запустил ./configure
в этой папке, а затем использовал make PARALLEL=-j2 install
команда (как сказано после ./configure
).
На этом шаге я получаю следующее в моей командной строке:
MMAKE_DIR=`pwd`/scripts scripts/mmake MMAKEFLAGS=-j2 DESTDIR= install
cd scripts && PATH=../scripts:../util:$PATH MMAKE_VPATH=. MMAKE_DIR=../scripts DESTDIR= ../scripts/mmake -j2
make[2]: Nothing to be done for `default_target'.
cd util && PATH=../scripts:../util:$PATH MMAKE_VPATH=. MMAKE_DIR=../scripts DESTDIR= ../scripts/mmake -j2 mfiltercc
make[2]: `mfiltercc' is up to date.
gc_grade=`scripts/ml --grade none.gc --print-gc-grade`; \
cd boehm_gc && PATH=../scripts:../util:$PATH MMAKE_VPATH=. MMAKE_DIR=../scripts DESTDIR= ../scripts/mmake -j2 GC_GRADE=$gc_grade
MAKEFLAGS=""; export MAKEFLAGS; \
PATH=../util:$PATH make -j2 -j1 \
GRADE=none.gc GC_GRADE=gc \
AR=ar RANLIB=ranlib \
libgc.a libgc.dylib \
FINAL_INSTALL_MERC_GC_LIB_DIR=/usr/local/mercury-11.07.2/lib/mercury/lib \
dylib
make[3]: `libgc.a' is up to date.
make[3]: `libgc.dylib' is up to date.
make[3]: Nothing to be done for `dylib'.
cd runtime && PATH=../scripts:../util:$PATH MMAKE_VPATH=. MMAKE_DIR=../scripts DESTDIR= ../scripts/mmake -j2
make[2]: Nothing to be done for `default_target'.
cd util && PATH=../scripts:../util:$PATH MMAKE_VPATH=. MMAKE_DIR=../scripts DESTDIR= ../scripts/mmake -j2
make[2]: Nothing to be done for `default_target'.
cd robdd && PATH=../scripts:../util:$PATH MMAKE_VPATH=. MMAKE_DIR=../scripts DESTDIR= ../scripts/mmake -j2
make[2]: Nothing to be done for `default_target'.
cd library && PATH=../scripts:../util:$PATH MMAKE_VPATH=. MMAKE_DIR=../scripts DESTDIR= ../scripts/mmake -j2
../scripts/mgnuc --grade none.gc -- -c tree234.c -o tree234.o
../scripts/mgnuc --grade none.gc -- -c array.c -o array.o
tree234.c:619: error: initializer element is not constant
tree234.c:619: error: (near initialization for ‘mercury_common_1[0].f2’)
tree234.c:623: error: initializer element is not constant
tree234.c:623: error: (near initialization for ‘mercury_common_1[1].f2’)
tree234.c:631: error: initializer element is not constant
tree234.c:631: error: (near initialization for ‘mercury_common_1[3].f2’)
tree234.c:640: error: initializer element is not constant
tree234.c:640: error: (near initialization for ‘mercury_common_2[0].f1[1]’)
tree234.c:646: error: initializer element is not constant
tree234.c:646: error: (near initialization for ‘mercury_common_2[1].f1[1]’)
tree234.c:652: error: initializer element is not constant
tree234.c:652: error: (near initialization for ‘mercury_common_2[2].f1[1]’)
tree234.c:658: error: initializer element is not constant
tree234.c:658: error: (near initialization for ‘mercury_common_2[3].f1[1]’)
array.c:681: error: initializer element is not constant
array.c:681: error: (near initialization for ‘mercury_common_1[0].f1[1]’)
array.c:699: error: initializer element is not constant
array.c:699: error: (near initialization for ‘mercury_common_1[3].f1[1]’)
array.c:715: error: initializer element is not constant
array.c:715: error: (near initialization for ‘mercury_common_1[6].f1[0]’)
array.c:717: error: initializer element is not constant
array.c:717: error: (near initialization for ‘mercury_common_1[6].f1[1]’)
array.c:729: error: initializer element is not constant
array.c:729: error: (near initialization for ‘mercury_common_1[8].f1[1]’)
array.c:754: error: initializer element is not constant
array.c:754: error: (near initialization for ‘mercury_common_2[1].f2’)
array.c:758: error: initializer element is not constant
array.c:758: error: (near initialization for ‘mercury_common_2[2].f2’)
array.c:762: error: initializer element is not constant
array.c:762: error: (near initialization for ‘mercury_common_2[3].f2’)
make[2]: *** [array.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [tree234.o] Error 1
make[1]: *** [library] Error 2
make: *** [install] Error 2
Затем я прочитал readme, и он сказал, что я должен использовать другую версию GCC
, Итак, я установил эти Command Line Tools
(как я обнаружил, что они включают GCC) и попробовал еще раз. Не повезло, все та же проблема.
Любая помощь будет оценена.
2 ответа
Я главный сопровождающий порт OS X для Mercury. В XCode 4.* исполняемый файл с именем gcc на самом деле не gcc, а символическая ссылка для llvm-gcc. llvm-gcc содержит ошибки и не может скомпилировать код C, сгенерированный компилятором Mercury. Мы проверили, что рассматриваемый код C является допустимым C, и оба (настоящие) gcc и clang не имеют с этим проблем.
Если вы используете Mac OS X 10.7 или 10.8, я настоятельно рекомендую использовать clang в качестве компилятора C для Mercury. (Подробности см. В файле README.clang в дистрибутиве.) Кроме того, вы можете установить реальную версию gcc (например, из macports) и использовать ее.
Привет у меня точно такая же проблема.
Я буду держать вас в курсе, я думаю, я только что понял это. Забавно, потому что я сделал те же самые шаги, что и ты. Я планирую установить новый gcc и выбрать его для компиляции.
Возможно студент KULeuven, а также:)?
-- Редактировать:
Похоже, я только что это исправил, я скачал gcc 4.3, установил его. Добавил это в ~/.profile:
экспорт PATH=/usr/local/bin:$PATH
побежал source ~/.profile
и попытался сделать снова, он все еще устанавливает. Он работает уже 4 минуты, так что, полагаю, я не в лесу, в прошлый раз мне потребовалось 5 секунд, чтобы вызвать ошибку.