GCC用__stdcall编译一个dll

时间:2008-09-20 07:46:05

标签: c++ gcc name-decoration

当我们在visual studio 2008中使用__stdcall编译一个dll时,dll中编译的函数名是。

FunctionName

虽然当我们使用GCC使用wx-dev-cpp编译相同的dll时,GCC会附加函数所具有的参数数量,因此使用Dependency walker的函数名称如下所示。

FunctionName @ numberOfParameters或== FunctionName @ 8

如何告诉GCC编译器从dll中的导出符号中删除@nn?

3 个答案:

答案 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中的链接器选项。这将确保存在两个函数名称(修饰和未修饰),并且可以用作别名。