当我们在visual studio 2008中使用__stdcall编译一个dll时,dll中编译的函数名是。
FunctionName
虽然当我们使用GCC使用wx-dev-cpp编译相同的dll时,GCC会附加函数所具有的参数数量,因此使用Dependency walker的函数名称如下所示。
FunctionName @ numberOfParameters或== FunctionName @ 8
如何告诉GCC编译器从dll中的导出符号中删除@nn?
答案 0 :(得分:6)
只需在gcc命令行上使用-Wl,--kill-at
,它会将--kill-at
传递给链接器。
参考文献:
答案 1 :(得分:5)
__ stdcall通过在开头添加下划线来装饰函数名,并在末尾添加参数的字节数(以@分隔)。
所以,一个功能:
void __stdcall Foo(int a, int b);
......将成为_Foo @ 8。
如果在.DEF文件的EXPORTS部分列出函数名称(未修饰),则会导出未修饰的文件。
也许这就是区别?
答案 2 :(得分:1)
您还可以将-Wl,--add-stdcall-alias
用于GCC中的链接器选项。这将确保存在两个函数名称(修饰和未修饰),并且可以用作别名。