Ошибка компиляции Mercury в 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

Затем я прочитал ридми, и там было сказано, что я должен использовать другую версию GCC. Итак, я установил эти Command Line Tools (так как я обнаружил, что они включают GCC) и попробовал еще раз. Не повезло, все та же проблема.

Любая помощь будет оценена по достоинству.


person Novarg    schedule 13.12.2012    source источник
comment
Вам может понадобиться указать, какой компилятор C использовать с переменной среды, прежде чем запускать configure. Я не уверен, хотя, поскольку я не использую OS X.   -  person Paul Bone    schedule 15.12.2012


Ответы (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) и использовать ее.

person Julien Fischer    schedule 19.12.2012

Привет у меня точно такая же проблема.

Я буду держать вас в курсе, кажется, я только что понял это. Забавно, потому что я сделал те же шаги, что и вы. Я планирую установить новый gcc и выбрать его для компиляции.

Наверное, тоже студент KULeuven :)?

-- Редактировать:

Похоже, я только что исправил, скачал gcc 4.3, установил. Добавил это в ~/.profile:

экспорт PATH=/usr/local/bin:$PATH

запустил source ~/.profile и снова попытался сделать make, он все еще устанавливается. Он работает уже 4 минуты, поэтому я предполагаю, что я из леса, в прошлый раз мне потребовалось 5 секунд, чтобы получить ошибку.

person peterjanbrone    schedule 13.12.2012