g++:如何整理导出的符号
我正在尝试编译一个使用 JNI 的 Java 库。当我启动程序时,我看到崩溃并出现 UnsatisfiedLinkError,它表示在 DLL 中找不到特定方法。
经过仔细检查,我发现我用于编译和链接的 g++ 通过在方法名称中添加“@8”或“@16”等后缀来破坏我的方法名称。有人知道禁用名称修改的正确编译器选项吗?提前致谢!
编辑:我通过 Eclipse + CDT 插件使用 MinGW。
I'm trying to compile a Java library that uses JNI. When I start the program, I see a crash with an UnsatisfiedLinkError, which says that a particular method could not be found in the DLL.
On closer inspection, I found out that g++, which I use for compilation and linking, mangled my method names by adding suffixes such as "@8" or "@16" to the method names. Does anybody know the correct compiler options to disable the name mangling? Thanks in advance!
EDIT: I'm using MinGW through Eclipse + CDT plugin.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了使 JNI 调用能够与使用 GCC 编译的 Windows DLL 一起使用,您需要在链接阶段向 GCC 添加 add-stdcall-alias 参数:
这会将正确的函数名称添加到 DLL 中,从而启用通过 JNI 的调用。
For JNI calls to work with Windows DLLs compiled with GCC you need to add a add-stdcall-alias parameter to GCC on linking phase:
Which will add correct function names to the DLL and thus enable calls via JNI.