java - code::blocks 不支持 JNI 宏?

标签 java macros java-native-interface codeblocks

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

当我尝试在 native 代码中使用宏(JNIEXPORT 和 JNICALL)运行 java 程序时,出现不满意的链接错误。但是当我删除宏时,我没有得到任何异常(exception)。 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)

但在抛出此异常之前,它会打印 native 代码中的一行。问题确实出在宏上。

最佳答案

如果源代码编译并创建了 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

关于java - code::blocks 不支持 JNI 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10945865/

相关文章:

macros - 在 Latex 中将两个命令合并为一个新命令

java - Servlet 和 jsp 字符编码特性

c - C 中未声明的宏

java - 继承,我应该如何改进这个程序有什么建议吗?

C++ 连接 __func__ 和 const char 文字

java - JNI : how to return byte array via java field?

java - 如何在 JNI 中实例化一个类

java - 在 Java 中造成 native 内存泄漏

java - 对于每个循环编辑原始二维数组

java.lang.NoClassDefFoundError : org/json/JSONObject when Java Class runs on OAM Server