【发布时间】:2013-12-10 02:16:44
【问题描述】:
我有一个简单的 JNI .DLL,我试图在测试 Java 应用程序中使用它。它是一个.c 文件,由几个函数组成,标题由javah 生成。 (顺便说一句,我正在使用 MinGW 编译)
如果我用 GCC 编译和链接这段代码,我可以用 System.loadLibrary() 加载 .DLL 并使用它。但是,如果我用 G++ 编译它,loadLibrary() 将因可怕的“UnsatisfiedLinkError”而失败。
这是我的 GCC 行:
gcc -Wl,--add-stdcall-alias -I"C:\Program Files (x86)\Java\jdk1.7.0_45\include" -I"C:\Program Files (x86)\Java\jdk1 .7.0_45\include\win32" -shared -o TestJNI.dll TestJNI.c
这是我的 G++ 行:
g++ -Wl,--add-stdcall-alias -I"C:\Program Files (x86)\Java\jdk1.7.0_45\include" -I"C:\Program Files (x86)\Java\jdk1 .7.0_45\include\win32" -shared -o TestJNI.dll TestJNI.c
有什么想法吗?我假设 G++ 命名函数的方式有所不同,但我不知道是什么......
【问题讨论】:
-
你能检查一下dll中导出的函数名,看看两者有什么区别吗?您可以使用 depwalker 或 objdump 或 dumpbin 等来做到这一点。
-
谢谢大狼!我下载了 depwalker,它立即告诉我我缺少一个引用的 .DLL (libgcc_s_dw2-1.dll)。这就是我需要知道的!
标签: gcc java-native-interface g++ mingw