问题
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