GCC中有没有什么可以改变出口名称修改方案?

我试图建立一个我有的项目,它有几个导出的函数。 这些函数遵循stdcall惯例,如果使用GCC编译,它们会被破坏

Func@X

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

_Func@X

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


看到这个答案。

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


有关-fleading-下划线,请参阅GCC手册。 不过,请阅读关于此行动后果的警告; 它可能不是你认为它的解决方案。


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

EXPORTS
  Func1
  Func2
  ...
链接地址: http://www.djcxy.com/p/43587.html

上一篇: Is there anything to change the exports name mangling scheme in GCC?

下一篇: HTTP.sys barfs