有什么可以改变海湾合作委员会的出口名称改造计划吗?

时间:2009-11-09 20:44:28

标签: c gcc name-mangling

我正在尝试构建一个项目,它有几个导出的函数。函数遵循stdcall约定,如果用GCC编译为

,它们会被破坏
Func@X

其他编译器会破坏这样的名称:

_Func@X

有什么办法可以强制GCC将导出函数的名称变成后面的例子吗?

3 个答案:

答案 0 :(得分:4)

请参阅this answer

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

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


哦,对,@很特别:它用于符号版本控制。我认为__asm__("...@...")曾经工作过,但我想它已不复存在了。

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

这必须附带version script文件,例如:

1 {
  global:
    _Func;
};
链接时

给予gcc -Wl,--version-script=foo.version

答案 1 :(得分:0)

有关-fleading-underscore的信息,请参阅GCC手册。但是,请阅读有关此行动后果的警告;它可能不是你认为的解决方案。

答案 2 :(得分:0)

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

EXPORTS
  Func1
  Func2
  ...