7

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

Func@X

其他编译器会像这样修改名称:

_Func@X

有什么办法可以强制 GCC 将导出函数的名称修改为后面的示例?

4

3 回答 3

4

看到这个答案

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

于 2009-11-09T22:07:56.087 回答
0

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

于 2009-11-09T20:52:39.380 回答
0

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

EXPORTS
  Func1
  Func2
  ...
于 2009-11-09T20:58:20.330 回答