即,DLL名称末尾有一个额外的@ 8,这会造成麻烦。显然,在gcc中使用--kill-at标志可以解决这个问题,但我找不到任何类似的MSVC建议。
编辑:更多信息:
我正在努力让C ++ JNI dll工作,但我总是得到 线程“Thread-0”中的异常java.lang.UnsatisfiedLinkError:eveTimers.PollThread.checkKeyboardChanges()V 回来而不是一个有效的程序。我使用quickview查看dll并发现它用@ 8修饰,http://www.velocityreviews.com/forums/t143642-jni-unsatisfied-link-error-but-the-method-name-is-correct.html建议这是一个可能的问题。非常感谢帮助。
答案 0 :(得分:1)
[编辑为无关紧要,以下评论]。
另一种方法是specify export names in a .DEF file。
您的调用约定和链接器设置也会影响这一点。说实话,这是一种黑色艺术。使用MSVC已经十几年了,你仍会偶尔遇到讨厌的名称错误问题,应该很容易修复,但考虑到不同的设置如何相互作用,实际修复是非常重要的。