GCC使用__stdcall编译dll
时间:2020-03-06 14:28:47 来源:igfitidea点击:
当我们在Visual Studio 2008中使用__stdcall编译dll时,dll中的已编译函数名称为。
功能名称
尽管当我们使用wx-dev-cpp使用GCC编译相同的dll时,GCC会添加该函数具有的参数数量,因此使用Dependency Walker的函数名称看起来像。
FunctionName @ numberOfParameters或者== FunctionName @ 8
我们如何告诉GCC编译器从dll中的导出符号中删除@nn?
解决方案
__stdcall通过在开头添加下划线,并在结尾添加参数的字节数(用@分隔)来修饰函数名称。
因此,一个函数:
void __stdcall Foo(int a, int b);
...将成为_Foo @ 8.
如果我们在.DEF文件的EXPORTS部分中列出了函数名称(未修饰),则该功能名称将以未修饰形式导出。
也许这是区别?
只需在gcc命令行上使用-Wl,-kill-at,它将把--kill-at传递给链接器。
参考:
- http://sourceware.org/binutils/docs/ld/Options.html#Options
- http://www.geocities.com/yongweiwu/stdcall.htm