c++ - gcc:错误:在 MacOS 上构建 openjdk 9 时无法识别的命令行选项 '-mstack-alignment=16'

标签 c++ gcc build java

我想构建jdk9但是我遇到了以下问题。 我在 OSX El Capitan 上使用 gcc&g++ 版本 5.3.0 (Homebrew gcc 5.3.0)。 我也试过使用 4.9.3,但还是一样。

这是我遇到问题的方式:

➜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

然后我得到如下错误日志:

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

但是当我使用 --enable-debug --disable-warnings-as-errors配置和make结果目标,没有错误。

看起来它可能与 --enable-native-coverage 有关选项和 -with-toolchain-type=gcc选项,默认情况下考虑工具链为 clang (但工具链必须是 gcc 才能使 --enable-native-coverage 工作),但我该如何修复它?

最佳答案

-mstack-alignment=n 是一个 clang 选项,gcc 无法识别。 对应的gcc选项为-mpreferred-stack-boundary=n .

请注意,它们并不完全同义。对于 -mstack-alignment=nn 只是所需的对齐量。对于 -mpreferred-stack-boundary=n, 2^n 是所需的对齐数量,因此:

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

另请注意,n= 4 是 -mpreferred-stack-boundary 的默认值,因此对于 gcc,您可以忽略该选项。

关于c++ - gcc:错误:在 MacOS 上构建 openjdk 9 时无法识别的命令行选项 '-mstack-alignment=16',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40766168/

相关文章:

c++ - 如何用删除器调用 unique_ptr 构造函数?

c++ - GCC 中的不同模板错误格式?

c++ - 如何检测 C++ 中的溢出?

linux - 如何在linux中不使用dlsym进行hook

python - cx_oracle 5.2.1 setup.py 如何自动找到它的构建依赖项?

gradle - 如何更改使用 shadowjar 创建的 jar 的名称

c++ - 使用类模板的下标重载函数中的引用类型初始化无效

c++ - 通过浮点指针操作字节 vector

c++ - GCC:限制长双宽

java - 使用gradle编译时如何在intellij中包含构建目录作为源目录