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