目前的情况是,我正试图在Windows10 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的
JNI_OnLoad
中的JNI_UnLoad
和jnilib.c
的签名与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更新131,但是我检查了这个返回Java 7的头,它的定义是相同的。在issue 272中实现着色支持时,tcnative项目似乎更改了此文件。
我试图修改
jnilib.c
以包含JNIEXPORT
和JNICALL
宏,但它被生成过程覆盖,无论怎样,我都希望有一个不涉及修改源文件的可重复生成。我做错什么了?相同的生成环境能够生成版本2.0.1.Final。 最佳答案
https://github.com/netty/netty-tcnative/pull/300被合并并修复了问题。这将是netty tcnative 2.0.7.Final的一部分