2016-12-03 1 views
1

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?

Répondre

1

CC_FOR_BUILD est supposé être un compilateur qui peut compiler des outils pour le système actuel, plutôt que celui pour lequel vous voulez construire les binaires. Le nom vient du fait que CBUILD est le nom pour référencer le système sur lequel la construction se passe.

I wrote a blog post some time ago qui explique la nomenclature de ces systèmes et comment ils sont censés être utilisés.