编译静态链接 netty-tcnative 失败,与 JDK 中的 jni.h 不匹配
Compiling statically linked netty-tcnative fails with mismatch against jni.h from JDK
情况是我试图在 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'
然后我比较了来自 tcnative 的 jnilib.c
中 JNI_OnLoad
和 JNI_UnLoad
的签名与来自 JDK.
的 jni.h
jnilib.c
jint JNI_OnLoad(JavaVM* vm, void* reserved)
...
void JNI_OnUnload(JavaVM* vm, void* reserved)
jni.h
/* Defined by native libraries. */
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved);
JNIEXPORT void JNICALL
JNI_OnUnload(JavaVM *vm, void *reserved);
我在 Java 8 update 131 但我检查了这个 header 回到 Java 7 并且它的定义方式相同。 tcnative 项目似乎在 issue 272.
中实现着色支持时更改了此文件
我已尝试修改 jnilib.c
以包含 JNIEXPORT
和 JNICALL
宏,但它被构建过程覆盖,无论如何我都希望有一个可重复的构建'涉及修改源文件。我究竟做错了什么?相同的构建环境能够构建版本 2.0.1.Final.
https://github.com/netty/netty-tcnative/pull/300 已合并并修复了问题。这将是 netty-tcnative 2.0 的一部分。7.Final
情况是我试图在 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'
然后我比较了来自 tcnative 的 jnilib.c
中 JNI_OnLoad
和 JNI_UnLoad
的签名与来自 JDK.
jni.h
jnilib.c
jint JNI_OnLoad(JavaVM* vm, void* reserved)
...
void JNI_OnUnload(JavaVM* vm, void* reserved)
jni.h
/* Defined by native libraries. */
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *vm, void *reserved);
JNIEXPORT void JNICALL
JNI_OnUnload(JavaVM *vm, void *reserved);
我在 Java 8 update 131 但我检查了这个 header 回到 Java 7 并且它的定义方式相同。 tcnative 项目似乎在 issue 272.
中实现着色支持时更改了此文件我已尝试修改 jnilib.c
以包含 JNIEXPORT
和 JNICALL
宏,但它被构建过程覆盖,无论如何我都希望有一个可重复的构建'涉及修改源文件。我究竟做错了什么?相同的构建环境能够构建版本 2.0.1.Final.
https://github.com/netty/netty-tcnative/pull/300 已合并并修复了问题。这将是 netty-tcnative 2.0 的一部分。7.Final