g++:如何整理导出的符号

发布于 2024-08-16 06:02:44 字数 238 浏览 3 评论 0原文

我正在尝试编译一个使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

记忆之渊 2024-08-23 06:02:44

为了使 JNI 调用能够与使用 GCC 编译的 Windows DLL 一起使用,您需要在链接阶段向 GCC 添加 add-stdcall-alias 参数:

gcc -Wl,--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:

gcc -Wl,--add-stdcall-alias

Which will add correct function names to the DLL and thus enable calls via JNI.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文