GCC仅从dll导出装饰函数名称

时间:2010-03-24 05:36:38

标签: c++ gcc dll stdcall name-decoration

我有一个dll,它导出一个函数......

extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}

我用Code :: Blocks GCC编译器(V3.4.5)编译它。问题:生成的dll导出装饰函数名...

MP_GetFactory@4

这无法加载,应该是老了...

MP_GetFactory

我已经研究了大约4个小时。我认为--add-stdcall-alias是修复此问题的选项。我的代码::阻止日志显示......

  

mingw32-g ++。exe -shared -Wl, - out-implib = bin \ Debug \ libGainGCC.a -Wl, - dll obj \ Debug \ se_sdk3 \ mp_sdk_audio.o obj \ Debug \ se_sdk3 \ mp_sdk_common.o obj \ Debug \ Gain \ Gain.o obj \ Debug \ Gain \ gain.res -o bin \ Debug \ GainGCC.sem --add -stdcall-alias -luser32

..所以我认为那是正确的选择吗?但没有运气。 Dependancy Walker仅显示正在导出的装饰名称。 我通过使用__cdecl而不是__stdcall得到了它的工作,然后将该名称导出为ok,但该函数在被调用时会破坏堆栈(因为调用者期望其他调用约定)。

2 个答案:

答案 0 :(得分:5)

很抱歉回答我自己的问题,终于明白了。

项目/构建选项/链接器/其他链接器选项 -Wl, - 杀-在

...杀死装饰'@'符号等。

答案 1 :(得分:1)

我认为它应该是-Wl, - add-stdcall-alias和“kill-at”技巧会使生成的导入库文件无法使用。