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?
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