GCC exportações decorados função de apenas o nome da dll
-
22-09-2019 - |
Pergunta
Eu tenho uma dll, ele exporta uma função...
extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}
Eu compilar este com o Code::Blocks compilador GCC (V3.4.5).Problema:resultante dll exporta nome da função decorados...
MP_GetFactory@4
Esta falha ao carregar, deve ser puro e simples...
MP_GetFactory
Eu pesquisei isso por cerca de 4 horas.Eu acho que --add-stdcall-alias é a opção para corrigir isso.O meu Código::Blocos de log mostra...
mingw32-g++.exe -shared-Wl,--out-implib=bin\Debug\libGainGCC.um -Wl,--dll obj\Debug\se_sdk3\mp_sdk_audio.o obj\Debug\se_sdk3\mp_sdk_common.o obj\Debug\Ganhar\o Ganho.o obj\Debug\Ganhar\o ganho.res -o bin\Debug\GainGCC.sem --add-stdcall-alias -luser32
..então eu acho que essa é a opção correta aí?Mas sem sorte.Dependências Walker mostrar apenas o nome decorado a ser exportado.Eu tenho meio que trabalho utilizando __cdecl em vez de __stdcall, o nome é exportados, em seguida, ok, mas a função corrompe a pilha quando chamado (porque o chamador espera a outra convenção de chamada).
Solução
Desculpe responder a minha própria pergunta, finalmente descobri.
Projeto/Opções De Compilação/Linker/Outras Opções De Vinculador -Wl,--matam-no
...mata a decoração do símbolo'@', etc.
Outras dicas
Eu acho que deveria ser -Wl,--add-stdcall-alias e o "matem-no" truques vai fazer gerado o arquivo de biblioteca de importação não utilizável.