2016-11-23 2 views
1

Je veux construire jdk9 mais j'ai rencontré le problème suivant. J'utilise gcc & g ++ version 5.3.0 (Homebrew gcc 5.3.0) sur OSX El Capitan. J'ai également essayé d'utiliser 4.9.3, mais toujours la même chose.gcc: erreur: option de ligne de commande non reconnue '-mstack-alignment = 16' lors de la construction de openjdk9 sur MacOSX

Voici comment j'ai rencontré le problème:

➜openjdk9 bash ./configure --enable-native-coverage --with-toolchain-type=gcc -disable-warnings-as-errors 
➜openjdk9 cd build/macosx-x86_64-normal-server-release 
➜macosx-x86_64-normal-server-release make 

Je suis le journal d'erreur suivant:

Building target 'default (exploded-image)' in configuration 'macosx-x86_64-normal-server-release' 
Building JVM variant 'server' with features 'all-gcs cds compiler1 compiler2 dtrace fprof jni-check jvmci jvmti management nmt services vm-structs' 
Compiling 8 files for BUILD_TOOLS_LANGTOOLS 
Creating adlc from 13 file(s) 
Compiling 2 files for BUILD_JVMTI_TOOLS 
Creating libjsig.dylib from 1 file(s) 
gcc: error: unrecognized command line option '-mstack-alignment=16' 
make[4]: *** [/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/build/macosx-x86_64-normal-server-release/hotspot/libjsig/objs/jsig.o] Error 1 
make[3]: *** [jsig] Error 2 
make[3]: *** Waiting for unfinished jobs.... 
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp: In constructor 'Arena::Arena(size_t)': 
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:31:7: error: non-placement deallocation function 'static void Chunk::operator delete(void*, size_t)' [-fpermissive] 
void Chunk::operator delete(void* p, size_t length) { 
    ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:60:52: error: selected for placement delete [-fpermissive] 
    _first = _chunk = new (init_size) Chunk(init_size); 
                ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp: In constructor 'Arena::Arena()': 
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:31:7: error: non-placement deallocation function 'static void Chunk::operator delete(void*, size_t)' [-fpermissive] 
void Chunk::operator delete(void* p, size_t length) { 
    ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:67:66: error: selected for placement delete [-fpermissive] 
    _first = _chunk = new (Chunk::init_size) Chunk(Chunk::init_size); 
                   ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp: In member function 'void* Arena::grow(size_t)': 
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:31:7: error: non-placement deallocation function 'static void Chunk::operator delete(void*, size_t)' [-fpermissive] 
void Chunk::operator delete(void* p, size_t length) { 
    ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:97:31: error: selected for placement delete [-fpermissive] 
    _chunk = new (len) Chunk(len); 
          ^
make[4]: *** [/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/build/macosx-x86_64-normal-server-release/hotspot/variant-server/tools/adlc/objs/arena.o] Error 1 
make[4]: *** Waiting for unfinished jobs.... 
make[3]: *** [variant-server-gensrc] Error 2 
make[2]: *** [hotspot] Error 1 
make[2]: *** Waiting for unfinished jobs.... 

ERROR: Build failed for target 'default (exploded-image)' in configuration 'macosx-x86_64-normal-server-release' (exit code 2) 
=== Output from failing command(s) repeated here === 
* For target hotspot_libjsig_objs_jsig.o: 
gcc: error: unrecognized command line option '-mstack-alignment=16' 
* For target hotspot_variant-server_tools_adlc_objs_arena.o: 
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp: In constructor 'Arena::Arena(size_t)': 
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:31:7: error: non-placement deallocation function 'static void Chunk::operator delete(void*, size_t)' [-fpermissive] 
void Chunk::operator delete(void* p, size_t length) { 
    ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:60:52: error: selected for placement delete [-fpermissive] 
    _first = _chunk = new (init_size) Chunk(init_size); 
                ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp: In constructor 'Arena::Arena()': 
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:31:7: error: non-placement deallocation function 'static void Chunk::operator delete(void*, size_t)' [-fpermissive] 
void Chunk::operator delete(void* p, size_t length) { 
    ^
/Users/weizhaoy/Documents/STAP/Research/jdk9/openjdk9/hotspot/src/share/vm/adlc/arena.cpp:67:66: error: selected for placement delete [-fpermissive] 
    ... (rest of output omitted) 
=== End of repeated output === 
No indication of failed target found. 
Hint: Try searching the build log for '] Error'. 
Hint: If caused by a warning, try configure --disable-warnings-as-errors. 

make[1]: *** [main] Error 1 
make: *** [default] Error 2 

Mais quand je la configuration --enable-debug --disable-warnings-as-errors et make la cible résultante, il n'y avait pas Erreur.

On dirait qu'il peut avoir quelque chose à voir avec l'option --enable-native-coverage et l'option -with-toolchain-type=gcc, considérant par défaut le toolchain serait clang (mais le toolchain doit être gcc pour faire --enable-native-coverage travail), mais comment puis-je résoudre ce problème?

+0

Utilisez 'make LOG = trace' pour que la construction OpenJDK affiche toutes les commandes en cours d'exécution. Je crois qu'OpenJDK utilise clang par défaut sur Mac, donc il n'est probablement pas très bien conditionné par gcc. La première erreur pourrait être le hareng rouge; il me semble que les erreurs dans 'arena.cpp' sont ce qui cause l'échec de la compilation, et' --disable-warnings-as-errors' contourne cela. Vous pouvez utiliser la macro autoconf 'FLAGS_COMPILER_CHECK_ARGUMENTS' pour vérifier si votre compilateur supporte un drapeau. – omajid

Répondre

1

-mstack-alignment=n est une option clang, non reconnue par gcc. L'option gcc correspondante est -mpreferred-stack-boundary=n

Notez qu'ils ne sont pas exactement synonymes. Pour -mstack-alignment=n, n est simplement la quantité d'alignement désirée. Pour -mpreferred-stack-boundary=n, 2^n est la quantité d'alignement souhaitée, donc:

-mstack-alignment=16 = -mpreferred-stack-boundary=4 

Notez également que n = 4 est la valeur par défaut pour -mpreferred-stack-boundary, donc pour gcc vous pouvez simplement omettre cette option.