GCC экспортирует оформленное имя функции только из dll
У меня есть 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, затем имя экспортируется нормально, но функция вызывает стек при вызове (потому что вызывающая сторона ожидала другого соглашения о вызовах).
2 ответа
Извините, что отвечаю на свой вопрос, наконец-то разобрался.
Проект / Параметры сборки / Линкер / Другие опции Линкера -Wl, - kill-at
... убивает символ "@" и т.д.
Я думаю, что это должно быть -Wl, -add-stdcall-alias и трюки "kill-at" сделают сгенерированный файл библиотеки импорта непригодным для использования.