esportazioni GCC nome della funzione decorato solo da dll
-
22-09-2019 - |
Domanda
ho una dll, esporta una funzione ...
extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}
compilo questo con Code :: Blocks compilatore GCC (V3.4.5). Problema: dll con conseguente esportazioni decorato nome della funzione ...
MP_GetFactory@4
Questo non riesce a caricare, dovrebbe essere semplice vecchia ...
MP_GetFactory
Ho ricercato questo per circa 4 ore. Penso --add-stdcall-alias è la possibilità di risolvere il problema. Il mio codice :: Accedi Blocks spettacoli ...
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 \ guadagno \ Gain.o obj \ Debug \ guadagno \ gain.res -o bin \ Debug \ GainGCC.sem --add-stdcall-alias -luser32
.. quindi penso che sia l'opzione corretta in là? Ma senza fortuna. Dipendenza Walker mostrano solo il nome decorato da esportare. Ho preso a lavorare un pò utilizzando __cdecl invece di __stdcall, il nome viene poi esportato ok, ma la funzione corrompe lo stack quando viene chiamato (perché il chiamante attende l'altra convenzione di chiamata).
Soluzione
Mi dispiace di rispondere alla mia domanda, finalmente capito.
Progetto / costruzione / Opzioni del linker / Altre opzioni linker -Wl, - kill-a
... uccide la decorazione simbolo '@', ecc.
Altri suggerimenti
Credo che dovrebbe essere -Wl, - add-stdcall-alias e il "kill-a" trucchi faranno il file di libreria di importazione generato non utilizzabile
.