当我们在visual studio 2008中使用__stdcall编译一个dll时,dll中编译的函数名称是.
FunctionName
虽然当我们使用GCC使用wx-dev-cpp编译相同的dll时,GCC会附加函数所具有的参数数量,因此使用Dependency walker的函数名称如下所示.
FunctionName @ numberOfParameters或== FunctionName @ 8
你如何告诉GCC编译器从dll中的导出符号中删除@nn?
只需-Wl,--kill-at
在gcc命令行上使用,它将传递--kill-at
给链接器.
参考文献:
http://sourceware.org/binutils/docs/ld/Options.html#Options
http://www.geocities.com/yongweiwu/stdcall.htm
__stdcall通过在开头添加下划线来装饰函数名,并在末尾添加参数的字节数(以@分隔).
所以,一个功能:
void __stdcall Foo(int a, int b);
......会成为_Foo @ 8.
如果在.DEF文件的EXPORTS部分列出函数名称(未修饰),则将其导出为未修饰的.
也许这就是区别?