GCC экспортирует оформленное имя функции только из dll - PullRequest
4 голосов
/ 24 марта 2010

У меня есть 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 ]

5 голосов
/ 24 марта 2010

Извините, что отвечаю на свой вопрос, наконец-то разобрался.

Проект / Параметры сборки / Линкер / Другие параметры Линкера -Wl, - убей-на

... убивает символ украшения "@" и т. Д.

1 голос
/ 24 апреля 2014

Я думаю, что это должно быть -Wl, - add-stdcall-alias, а трюки "kill-at" сделают сгенерированный файл библиотеки импорта непригодным для использования.

...