我有一个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,但该函数在被调用时会破坏堆栈(因为调用者期望其他调用约定)。
答案 0 :(得分:5)
很抱歉回答我自己的问题,终于明白了。
项目/构建选项/链接器/其他链接器选项 -Wl, - 杀-在
...杀死装饰'@'符号等。
答案 1 :(得分:1)
我认为它应该是-Wl, - add-stdcall-alias和“kill-at”技巧会使生成的导入库文件无法使用。