MinGW: C++-Klassen-DLL von MSVC nutzen.

18/05/2010 - 14:28 von Marcus Hampel | Report spam
Moin,

ich habe eine Projekt am laufen, welches mit MinGW (32/64 Bit) übersetzt
wird. Dieses nutzt die Bibliothek xerces als XML-Parser. Nun hat sich
herausgestellt, dass die selbst übersetzte xerces-Bibliothek extrem
langsamer làuft als die Binary-Distribution für MSVC 6 (teilweise
doppelt so lange).
Dies wird daran liegen, dass die Binaries mit dem Intel-Compiler
übersetzt wurden. Zumindest bekomme ich, wenn ich die Bibliothek mit dem
MSVC 6 selbst übersetze eine noch schlechter optimierte Fassung der
Bibliothek (ein Test: Binary: 2s; mingw: 3,5-4s; MSVC 6: 5s).

Nun làge es nahe, die optimierte Binàrbibliothek einzubinden. Mit einer
erstellten "def"-Datei (mit pexports oder gendef) und dem "dlltool" bei
normalem C-Code kein Problem. Bei C++-Klassen scheinen die Symbole aber
grundsàtzlich verschiedene Konventionen zu nutzen, welche vom "dlltool"
nicht berücksichtigt werden:

MSVC:
"?fatalError@HandlerBase@xercesc_2_7@@UAEXABVSAXParseException@2@@Z"

MinGW:
"_ZN11xercesc_2_717SAXParseExceptionD1Ev"

Beides für die Methode
"xercesc_2_7::HandlerBase::fatalError(xercesc_2_7::SAXParseException
const&)"

Dazu finde ich kaum Informationen. Ich frage mich auch, ob es überhaupt
funktionieren kann, selbst wenn man die Symbole übereinander bekommt. Es
ist ja nicht gesagt, dass beide Compiler die Klassen im Hauptspeicher
identisch abbilden. Auch das Exception-Handling könnte problematisch sein.

Kennt hier jemand die Problematik und hat da vielleicht eine Lösung parat?

Bis denne,
Marcus
 

Lesen sie die antworten

#1 Edzard Egberts
18/05/2010 - 16:02 | Warnen spam
Marcus Hampel schrieb:
Bei C++-Klassen scheinen die Symbole aber
grundsàtzlich verschiedene Konventionen zu nutzen, welche vom "dlltool"
nicht berücksichtigt werden:

MSVC:
"?@xercesc_2_7@@@@Z"

MinGW:
"_ZN11xercesc_2_717SAXParseExceptionD1Ev"



Guck' mal nach "name mangling" ich wollte nur die Schreibweise
überprüfen und fand direkt das hier:
http://www.kegel.com/mangle.html

Ähnliche fragen