编译静态链接的netty-tcnative失败,与JDK的jni.h不匹配

时间:2017-08-15 19:38:56

标签: java c openssl java-native-interface netty

情况是我正在尝试在Windows 10 32位计算机上编译netty-tcnative library版本2.0.3.Final。我收到以下错误:

[INFO] .\src\jnilib.c(360): error C2373: 'JNI_OnLoad': redefinition; different type modifiers [C:<redacted>\netty-tcnative\openssl-static\target\native-build\vs2010.vcxproj]
[INFO]   C:\Program Files\Java\jdk1.8.0_131\include\jni.h(1945): note: see declaration of 'JNI_OnLoad'
[INFO] .\src\jnilib.c(423): error C2373: 'JNI_OnUnload': redefinition; different type modifiers [C:<redacted>\netty-tcnative\openssl-static\target\native-build\vs2010.vcxproj]
[INFO]   C:\Program Files\Java\jdk1.8.0_131\include\jni.h(1948): note: see declaration of 'JNI_OnUnload'

然后,我将来自JNI_OnLoad的{​​{1}}和JNI_UnLoad的签名与来自JDK的jnilib.c的签名进行了比较。

jnilib.c

jni.h

jni.h

jint JNI_OnLoad(JavaVM* vm, void* reserved)
...
void JNI_OnUnload(JavaVM* vm, void* reserved)

我正在使用Java 8更新131,但我检查了此标头返回到Java 7并且它的定义方式相同。在issue 272中实现着色支持时,tcnative项目似乎更改了此文件。

我已尝试修改/* Defined by native libraries. */ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved); JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved); 以包含jnilib.cJNIEXPORT宏,但它会被构建过程覆盖,而且我想要一个不可重复的构建涉及修改源文件。我究竟做错了什么?相同的构建环境能够构建版本2.0.1.Final。

1 个答案:

答案 0 :(得分:1)

https://github.com/netty/netty-tcnative/pull/300已合并并修复了问题。这将是netty-tcnative 2.0.7.Final

的一部分