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