有什么可以改变 GCC 中的导出名称修改方案吗?
我正在尝试构建一个我拥有的项目,它有几个导出的函数。这些函数遵循 stdcall 约定,如果使用 GCC 编译,它们会被破坏,因为
Func@X
其他编译器会像这样破坏名称:
_Func@X
有什么方法可以强制 GCC 将导出函数的名称破坏为后面的示例吗?
I'm trying to build a project I have and it has several exported functions. The functions follow the stdcall convention and they get mangled if compiled with GCC as
Func@X
Other compilers mangle the name like this:
_Func@X
Is any way I can force GCC to mangle the names of the exported functions to the later example?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
请参阅此答案。
这将强制 GCC 将符号命名为
_Func@X
,无论它通常会做什么。哦,对了,
@
很特殊:它用于符号版本控制。我认为 __asm__("...@...") 曾经有效,但我想它不再有效了。这必须附有版本脚本 文件,例如:
链接时给予
gcc -Wl,--version-script=foo.version
。See this answer.
This will force GCC to name the symbol
_Func@X
regardless of what it would have done normally.Oh right,
@
is special: it's used for symbol versioning. I thought that__asm__("...@...")
used to work, but I guess it doesn't anymore.This must be accompanied by a version script file, like:
given to
gcc -Wl,--version-script=foo.version
when linking.请参阅有关 -fleading-underscore< 的 GCC 手册/a>.但是,请务必阅读有关此操作后果的警告;它可能不是您认为的解决方案。
See the GCC manual regarding -fleading-underscore. Do read the warnings about the consequences of this action however; it may not be the solution you think it is.
在 Windows 上处理函数名称修改时,最好的选择是始终使用
.def
文件。无论编译器如何,这都将工作相同。通常您只需要EXPORTS
部分:The best bet when dealing with function name mangling on Windows is to always use a
.def
file. This will work the same regardless of the compiler. Typically you only need theEXPORTS
section: