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

Jef*_*ock 4 c++ dll gcc stdcall name-decoration

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

extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}
Run Code Online (Sandbox Code Playgroud)

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

MP_GetFactory@4
Run Code Online (Sandbox Code Playgroud)

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

MP_GetFactory
Run Code Online (Sandbox Code Playgroud)

我研究了大约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,但该函数在被调用时会破坏堆栈(因为调用者期望其他调用约定).

Jef*_*ock 5

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

项目/构建选项/链接器/其他链接器选项-Wl, - kill-at

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