JNIEXPORT jint JNICALL JNI_Func(....) {
....
}
当我尝试在本机代码中使用宏(JNIEXPORT和JNICALL)运行java程序时,我得到了不满意的链接错误。但是当我删除宏时,我也不例外。难道IDE Code :: Blocks 不支持JNI宏吗?如果它支持我应该怎么做才能启用它们?
注意:我没有收到与定义的宏相关的错误或警告。它只是失败了,因为它给了我不满意的链接错误。
编辑:
Stacktrace:
Exception in thread "main" java.lang.UnsatisfiedLinkError: keylogger.TestKeys.initializeJNIVars()V
at keylogger.TestKeys.initializeJNIVars(Native Method)
at keylogger.TestKeys.main(TestKeys.java:22)
但在抛出此异常之前,它会从本机代码中打印一行。问题实际上是宏。
答案 0 :(得分:1)
如果源编译并创建了DLL,那么Code :: Blocks没有任何问题。 Code :: Blocks使用gcc,gcc可以创建没有问题的JNI DLL
如果在运行Java类时出现此错误,请确保已将DLL放在java.library.path
您需要在Project->Build options->Linker Settings->Other Linker Options
上添加这两个选项才能使其正常运行:
-Xlinker --add-stdcall-alias