2016-12-03 8 views
1

Я пытаюсь скомпилировать что-то для IBM Blue Gene/Q с GCC 4.9. В качестве зависимости мне нужна библиотека gmp (GNU Multi Precision), я использую версию 6.1.1. Это поставляется с GNU Autotools. Странно, раньше работал с LLVM. И вчера это не сработало в полдень, а снова вечером и уже не сегодня. Честно говоря, я совершенно смущен.configure пытается протестировать кросс-скомпилированную программу

В Blue Gene/Q вы компилируете на IBM PowerPC 740 и запускаете его на процессоре IBM PowerPC A2. Поэтому вам нужно использовать кросс-компилятор. Мой configure заключается в следующем:

/homec/hbn28/hbn28e/Sources/gmp-6.1.1/configure \ 
    --prefix=/homec/hbn28/hbn28e/local-juqueen \ 
    --host=powerpc64-bgq-linux \ 
    --build=powerpc64-unknown-linux-gnu \ 
    --disable-shared \ 
    --enable-static \ 
    CC=/bgsys/local/gcc/4.9.3/bin/mpigcc \ 
    CXX=/bgsys/local/gcc/4.9.3/bin/mpig++ \ 
    'CFLAGS=-O2 \ 
    -finline-limit=50000 \ 
    -Wall \ 
    -Wpedantic \ 
    -fmax-errors=1 \ 
    -fdiagnostics-color=auto \ 
    -Drestrict=__restrict__ \ 
    --std=gnu99' 

Ошибка относительно CC_FOR_BUILD

Первая проблема была эта ошибка.

/usr/include/stdio.h:34:21: error: stddef.h: No such file or directory 

Сформированный Makefile использовал CC для нескольких файлов, но тогда называли себя recurively с помощью CC=$(CC_FOR_BUILD). И это просто установлено на cc по умолчанию, внешний компилятор, который не делает ничего хорошего на вычислительном сервере. Поэтому я добавил CC_FOR_BUILD=/bgsys/local/gcc/4.9.3/bin/mpigcc к флагам configure. Это исправило эту ошибку.

Тестирование кросс скомпилирован двоичный

Затем configure скрипт работает немного дальше:

checking build system type... powerpc64-unknown-linux-gnu 
checking host system type... powerpc64-bgq-linux-gnu 
checking for a BSD-compatible install... /usr/bin/install -c 
checking whether build environment is sane... yes 
checking for powerpc64-bgq-linux-strip... no 
checking for strip... strip 
configure: WARNING: using cross tools not prefixed with host triplet 
checking for a thread-safe mkdir -p... /bin/mkdir -p 
checking for gawk... gawk 
checking whether make sets $(MAKE)... yes 
checking whether make supports nested variables... yes 
checking whether to enable maintainer-specific portions of Makefiles... no 
checking ABI=mode64 
checking whether /bgsys/local/gcc/4.9.3/bin/mpigcc is gcc... yes 
checking compiler /bgsys/local/gcc/4.9.3/bin/mpigcc -O2 -finline-limit=50000 -Wall -Wpedantic -fmax-errors=1 -fdiagnostics-color=auto -Drestrict=__restrict__ --std=gnu99 ... yes 
checking compiler /bgsys/local/gcc/4.9.3/bin/mpigcc -O2 -finline-limit=50000 -Wall -Wpedantic -fmax-errors=1 -fdiagnostics-color=auto -Drestrict=__restrict__ --std=gnu99 has sizeof(long)==8... yes 
checking for powerpc64-bgq-linux-gcc... /bgsys/local/gcc/4.9.3/bin/mpigcc 
checking whether the C compiler works... yes 
checking for C compiler default output file name... a.out 
checking for suffix of executables... 
checking whether we are cross compiling... yes 
checking for suffix of object files... o 
checking whether we are using the GNU C compiler... yes 
checking whether /bgsys/local/gcc/4.9.3/bin/mpigcc accepts -g... yes 
checking for /bgsys/local/gcc/4.9.3/bin/mpigcc option to accept ISO C89... none needed 
checking whether /bgsys/local/gcc/4.9.3/bin/mpigcc understands -c and -o together... yes 
checking for /bgsys/local/gcc/4.9.3/bin/mpigcc option to accept ISO C99... none needed 
checking for /bgsys/local/gcc/4.9.3/bin/mpigcc option to accept ISO Standard C... (cached) none needed 
checking how to run the C preprocessor... /bgsys/local/gcc/4.9.3/bin/mpigcc -E 
checking build system compiler /bgsys/local/gcc/4.9.3/bin/mpigcc... no 
configure: error: Specified CC_FOR_BUILD doesn't seem to work 

Глядя на config.log, он говорит

configure:9899: checking build system compiler /bgsys/local/gcc/4.9.3/bin/mpigcc 
configure:9912: /bgsys/local/gcc/4.9.3/bin/mpigcc conftest.c 
configure:9915: $? = 0 
/bgsys/source/srcV1R2M4.29840/comm/sys/buildtools/pami/common/bgq/BgqPersonality.h:102: 
/bgsys/source/srcV1R2M4.29840/comm/sys/buildtools/pami/common/bgq/BgqPersonality.h<102> 
/homec/hbn28/hbn28e/Sources/gmp-6.1.1/configure: line 10000: 26929 Aborted     (core dumped) ./a.out 
/homec/hbn28/hbn28e/Sources/gmp-6.1.1/configure: line 9917: ./b.out: No such file or directory 
/homec/hbn28/hbn28e/Sources/gmp-6.1.1/configure: line 9917: ./a.exe: No such file or directory 
/homec/hbn28/hbn28e/Sources/gmp-6.1.1/configure: line 9917: ./a_out.exe: No such file or directory 
/homec/hbn28/hbn28e/Sources/gmp-6.1.1/configure: line 9917: ./conftest: No such file or directory 
configure:9922: result: no 
configure:9927: error: Specified CC_FOR_BUILD doesn't seem to work 

кажется использовать правильный компилятор. При запуске программы во внешнем интерфейсе (где я компилирую) это терпит неудачу, так как BgqPersonality.h имеет специальную информацию о вычислительном бэкэнд, программа просто не может работать на интерфейсе.

configure предполагает, что компилятор сломан (что, возможно, для frontend) и прекращает строительство. Раньше у меня не было ошибок с LLVM, кросс-компиляция только отлично работала. configure даже говорит checking whether we are cross compiling... yes, поэтому он должен знать ситуацию. Возможно, CC_FOR_BUILD предназначен для интерфейса, тогда как CC предназначен для вычислительной базы. Без CC_FOR_BUILD Я не могу скомпилировать, как написано выше.

Есть ли способ получить этот крест, скомпилированный должным образом?

ответ

1

CC_FOR_BUILD должен быть компилятором, который может скомпилировать инструменты для системы текущего, а не той, для которой вы хотите построить двоичные файлы. Название исходит из того, что CBUILD - это имя для ссылки на систему, в которой происходит сборка.

I wrote a blog post some time ago, который объясняет номенклатуру этих систем и то, как они должны использоваться.