code :: blocks不支持JNI宏?

时间:2012-06-08 09:01:10

标签: java macros java-native-interface codeblocks

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)

但在抛出此异常之前,它会从本机代码中打印一行。问题实际上是宏。

1 个答案:

答案 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