1
JNIEXPORT jint JNICALL JNI_Func(....) {
  ....
}

当我尝试在本机代码中使用宏(JNIEXPORT 和 JNICALL)运行 java 程序时,出现不满意的链接错误。但是当我删除宏时,我也不例外。IDE Code::Blocks是否不支持 JNI 宏?如果它支持我应该怎么做才能启用它们?

注意:我没有收到与定义的宏相关的错误或警告。它只是使运行失败,因为它给了我不满意的链接错误。

编辑 :

堆栈跟踪 :

Exception in thread "main" java.lang.UnsatisfiedLinkError:  keylogger.TestKeys.initializeJNIVars()V
    at keylogger.TestKeys.initializeJNIVars(Native Method)
    at keylogger.TestKeys.main(TestKeys.java:22)

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

4

1 回答 1

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

于 2012-06-08T09:23:27.667 回答