"Unrecognized command-line option" 在 Java 从源构建 Native Access 期间
"Unrecognized command-line option" during Java Native Access build from sources
我必须从源构建以下项目:
git clone --depth 1 --branch 5.5.0 https://github.com/java-native-access/jna.git
为此,我安装了所需的库:
sudo apt-get install autoconf autogen
sudo apt-get install libtool
然后 运行“ant”命令出现以下错误:
native:
[exec] gcc -m64 -W -Wall -Wno-unused -Wno-parentheses -fPIC -O2 -fno-omit-frame-pointer -fno-strict-aliasing -D_REENTRANT -DHAVE_PROTECTION -I"/home/katya/java/include" -I"/home/katya/java/include/linux" -I"/home/katya/tmp_work/jna/build/headers" -I/home/katya/tmp_work/jna/build/native-linux-x86-64/libffi/include -DJNA_JNI_VERSION='"6.1.0"' -DCHECKSUM='"147a998f0cbc89681a1ae6c0dd121629"' -Wno-unknown-warning-option -Werror -Wno-clobbered -Wno-unused-variable -c dispatch.c -o /home/katya/tmp_work/jna/build/native-linux-x86-64/dispatch.o
[exec] In file included from dispatch.h:33,
[exec] from dispatch.c:30:
[exec] dispatch.c: In function ‘dispatch_direct’:
[exec] dispatch.c:1770:23: error: ‘alloca’ bound is unknown [-Werror=alloca-larger-than=]
[exec] 1770 | args[i] = alloca(data->cif.arg_types[i]->size);
[exec] | ^~~~~~
[exec] dispatch.c:1796:23: error: ‘alloca’ bound is unknown [-Werror=alloca-larger-than=]
[exec] 1796 | args[i] = alloca(data->cif.arg_types[i]->size);
[exec] | ^~~~~~
[exec] dispatch.c: At top level:
[exec] cc1: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ may have been intended to silence earlier diagnostics
[exec] cc1: all warnings being treated as errors
[exec] make: *** [Makefile:430: /home/katya/tmp_work/jna/build/native-linux-x86-64/dispatch.o] Error 1
BUILD FAILED
/home/katya/tmp_work/jna/build.xml:1003: exec returned: 2
你能告诉我哪里出了问题以及如何解决吗?
问题如下:alloca是一个需要小心使用的函数。在更新或等于 10 的 gcc 版本上,如果编译器无法证明用法已保存,则会发出警告。 JNA 是使用“-Werror”构建的,这会导致所有警告都被视为错误。
如果坚持要构建5.5.0,可以修改native/Makefile,去掉“LOC_CC_OPTS”的修改,增加了警告旗帜.
但是我强烈建议您转移到最新版本的 JNA(此问题已在大约一年前发布的 5.6.0 中修复),因为这些版本包含修复,您可能需要。
我必须从源构建以下项目:
git clone --depth 1 --branch 5.5.0 https://github.com/java-native-access/jna.git
为此,我安装了所需的库:
sudo apt-get install autoconf autogen
sudo apt-get install libtool
然后 运行“ant”命令出现以下错误:
native:
[exec] gcc -m64 -W -Wall -Wno-unused -Wno-parentheses -fPIC -O2 -fno-omit-frame-pointer -fno-strict-aliasing -D_REENTRANT -DHAVE_PROTECTION -I"/home/katya/java/include" -I"/home/katya/java/include/linux" -I"/home/katya/tmp_work/jna/build/headers" -I/home/katya/tmp_work/jna/build/native-linux-x86-64/libffi/include -DJNA_JNI_VERSION='"6.1.0"' -DCHECKSUM='"147a998f0cbc89681a1ae6c0dd121629"' -Wno-unknown-warning-option -Werror -Wno-clobbered -Wno-unused-variable -c dispatch.c -o /home/katya/tmp_work/jna/build/native-linux-x86-64/dispatch.o
[exec] In file included from dispatch.h:33,
[exec] from dispatch.c:30:
[exec] dispatch.c: In function ‘dispatch_direct’:
[exec] dispatch.c:1770:23: error: ‘alloca’ bound is unknown [-Werror=alloca-larger-than=]
[exec] 1770 | args[i] = alloca(data->cif.arg_types[i]->size);
[exec] | ^~~~~~
[exec] dispatch.c:1796:23: error: ‘alloca’ bound is unknown [-Werror=alloca-larger-than=]
[exec] 1796 | args[i] = alloca(data->cif.arg_types[i]->size);
[exec] | ^~~~~~
[exec] dispatch.c: At top level:
[exec] cc1: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ may have been intended to silence earlier diagnostics
[exec] cc1: all warnings being treated as errors
[exec] make: *** [Makefile:430: /home/katya/tmp_work/jna/build/native-linux-x86-64/dispatch.o] Error 1
BUILD FAILED
/home/katya/tmp_work/jna/build.xml:1003: exec returned: 2
你能告诉我哪里出了问题以及如何解决吗?
问题如下:alloca是一个需要小心使用的函数。在更新或等于 10 的 gcc 版本上,如果编译器无法证明用法已保存,则会发出警告。 JNA 是使用“-Werror”构建的,这会导致所有警告都被视为错误。
如果坚持要构建5.5.0,可以修改native/Makefile,去掉“LOC_CC_OPTS”的修改,增加了警告旗帜.
但是我强烈建议您转移到最新版本的 JNA(此问题已在大约一年前发布的 5.6.0 中修复),因为这些版本包含修复,您可能需要。