Je tente de compiler quelque chose pour IBM Blue Gene/Q avec GCC 4.9. En tant que dépendance j'ai besoin de la bibliothèque gmp (GNU Multi Precision), j'utilise la version 6.1.1. Cela vient avec GNU Autotools. Etrangement, il a déjà travaillé avec LLVM. Et hier ça n'a pas marché à midi mais encore le soir et pas plus aujourd'hui. Je suis complètement confus, honnêtement. Sur Blue Gene/Q, vous compilez sur un IBM PowerPC 740 et le laissez s'exécuter sur un processeur IBM PowerPC A2. Par conséquent, vous devez utiliser le compilateur croisé. Mon configure
est la suivante:configure essaye de tester un programme croisé
/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'
erreur concernant CC_FOR_BUILD
Le premier numéro a été cette erreur.
/usr/include/stdio.h:34:21: error: stddef.h: No such file or directory
Le produit Makefile
a utilisé CC
pour quelques fichiers, mais alors appelé lui-même à l'aide recurively CC=$(CC_FOR_BUILD)
. Et c'est juste réglé à cc
par défaut, le compilateur frontend qui ne fait rien de bon sur le backend de calcul. J'ai donc ajouté CC_FOR_BUILD=/bgsys/local/gcc/4.9.3/bin/mpigcc
aux drapeaux configure
. Cela a corrigé cette erreur.
cross test binaire compilé
Ensuite, le script configure
fonctionne un peu plus loin:
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
regardant config.log
, il dit
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
Il semble utiliser le compilateur correct. Lors de l'exécution du programme sur le frontend (où je compile), il échoue depuis le BgqPersonality.h
a des informations spéciales sur le backend de calcul, le programme ne peut tout simplement pas fonctionner sur le frontend.
configure
suppose que le compilateur est brisé (ce qui est sans doute pour le frontend) et arrête la construction. Auparavant, je n'avais aucune erreur avec LLVM, la compilation croisée a juste fonctionné très bien. configure
dit même checking whether we are cross compiling... yes
donc il doit être conscient de la situation. Peut-être le CC_FOR_BUILD
est destiné au frontend alors que CC
est pour le backend de calcul. Sans CC_FOR_BUILD
je ne peux pas compiler comme écrit ci-dessus.
Existe-t-il un moyen de compiler correctement cette croix?