Gcc exports декорированное имя функции только от DLL
-
22-09-2019 - |
Вопрос
У меня есть DLL, он экспортирует функцию ...
extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}
Я составляю это с Code :: Blocks GCC Compiler (v3.4.5). Проблема: Получающееся в результате экспорта DLL украшенные функции Имя ...
MP_GetFactory@4
Это не загружается, должно быть просто старым ...
MP_GetFactory
Я исследовал это около 4 часов. Я думаю,-Add-STDCALL-ALIAS-это возможность исправить это. Мой код :: Blocks Log показывает ...
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 debj Gain gain.o obj debug gain gain.res -o bin debug gaingcc.sem -add -stdcall -alias -luser32
.. так я думаю, что это правильный вариант там? Но не повезло. Зависимость Уокер показывает только украшенное название, которое экспортируется. Я получил его, чтобы работать, используя __CDECL вместо __stdcall, имя затем экспортируется OK, но функция повреждает стек при вызове (потому что вызывающий абонент ожидал другого вызова).
Решение
Извините, что ответил на мой собственный вопрос, наконец -то понял это.
Параметры проекта/сборки/линкеров/другие варианты линкера -WL,-kill-at
... убивает украшение '@' символ и т. Д.
Другие советы
Я думаю, что это должно быть -WL,-Add-STDCALL-ALIAS, и трюки «Убийства» сделают сгенерированный файл библиотеки импорта невозможным.