GCC compiling a dll with __stdcall

a 夏天 提交于 2019-12-10 03:22:19

问题


When we compile a dll using __stdcall inside visual studio 2008 the compiled function names inside the dll are.

FunctionName

Though when we compile the same dll using GCC using wx-dev-cpp GCC appends the number of paramers the function has, so the name of the function using Dependency walker looks like.

FunctionName@numberOfParameters or == FunctionName@8

How do you tell GCC compiler to remove @nn from exported symbols in the dll?


回答1:


__stdcall decorates the function name by adding an underscore to the start, and the number of bytes of parameters to the end (separated by @).

So, a function:

void __stdcall Foo(int a, int b);

...would become _Foo@8.

If you list the function name (undecorated) in the EXPORTS section of your .DEF file, it is exported undecorated.

Perhaps this is the difference?




回答2:


Just use -Wl,--kill-at on the gcc command line, which will pass --kill-at to the linker.

References:

  • http://sourceware.org/binutils/docs/ld/Options.html#Options
  • http://www.geocities.com/yongweiwu/stdcall.htm



回答3:


You can also use -Wl,--add-stdcall-alias to your linker options in GCC. This will ensure that both function names (decorated and undecorated) are present and can be used as alias.



来源:https://stackoverflow.com/questions/107549/gcc-compiling-a-dll-with-stdcall

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!