Я пытаюсь скомпилировать что-то для 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
Я не могу скомпилировать, как написано выше.
Есть ли способ получить этот крест, скомпилированный должным образом?