有什么可以改变 GCC 中的导出名称修改方案吗?

发布于 2024-08-10 09:16:38 字数 203 浏览 4 评论 0原文

我正在尝试构建一个我拥有的项目,它有几个导出的函数。这些函数遵循 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 技术交流群。

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

发布评论

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

评论(3

ぶ宁プ宁ぶ 2024-08-17 09:16:38

请参阅此答案

int Func() __asm__("_Func@X");

这将强制 GCC 将符号命名为 _Func@X,无论它通常会做什么。


哦,对了,@ 很特殊:它用于符号版本控制。我认为 __asm__("...@...") 曾经有效,但我想它不再有效了。

int Func() __asm__("_Func");
__asm__(".symver _Func, _Func@X");

这必须附有版本脚本 文件,例如:

1 {
  global:
    _Func;
};

链接时给予 gcc -Wl,--version-script=foo.version

See this answer.

int Func() __asm__("_Func@X");

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.

int Func() __asm__("_Func");
__asm__(".symver _Func, _Func@X");

This must be accompanied by a version script file, like:

1 {
  global:
    _Func;
};

given to gcc -Wl,--version-script=foo.version when linking.

疧_╮線 2024-08-17 09:16:38

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.

各自安好 2024-08-17 09:16:38

在 Windows 上处理函数名称修改时,最好的选择是始终使用 .def 文件。无论编译器如何,这都将工作相同。通常您只需要 EXPORTS 部分:

EXPORTS
  Func1
  Func2
  ...

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 the EXPORTS section:

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