g++:如何取消导出符号的名称修饰

5
我正在尝试编译一个使用JNI的Java库。当我启动程序时,出现了一个UnsatisfiedLinkError崩溃,其中指出DLL中找不到特定方法。
经过仔细检查,我发现g++在我的方法名称中添加了后缀,例如“@8”或“@16”,从而使它们变形。有人知道正确的编译器选项以禁用名称变形吗?谢谢!
编辑:我正在通过Eclipse + CDT插件使用MinGW。
1个回答

12

如果要使用 JNI 调用由 GCC 编译的 Windows DLL,需要在链接阶段向 GCC 添加一个 add-stdcall-alias 参数:

gcc -Wl,--add-stdcall-alias

这将向动态链接库添加正确的函数名称,从而通过JNI启用调用。


非常感谢!这终于解决了我的问题。有了这个参数,DLL中的每个方法都有一个装饰和未装饰的版本,而且Java程序也可以正常工作了 :D - python dude
@Mavrik,感谢您填写这个表格,我知道问题所在,但不知道解决方法。 - bmargulies
这对于除了修饰名称中的下划线之外的其他情况也适用吗? - mavavilj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接