msvc dll mit gcc verwenden



  • hallo

    ich habe eine recht umfangreiche dll mit dem msvc erstellt. jetzt möchte
    ich diese dll vom gcc aus verwenden. das klappt jedoch nicht, da der msvc
    anderes namemangling als der gcc verwendet. ich möchte/kann die dll aber nicht
    in ein extern "c" block stecken, da die dll sowohl in namespaces aufgeteilt ist,
    als auch klassen exportiert.

    dummerweise kann ich die dll nicht auf dem gcc kompilieren, den er findet header
    nicht oder der linker kommt mit den .libs nicht klar.

    gibt es irgentein tool, mit dem ich die dll so abändern kann, das der
    gcc damit was anfangen kann?

    MfG fragezeichen?



  • fragezeichen? schrieb:

    dummerweise kann ich die dll nicht auf dem gcc kompilieren, den er findet header
    nicht oder der linker kommt mit den .libs nicht klar.

    Der GCC verwendet auch keine .lib, sondern .a-Dateien als Bibliotheken. Wenn du mit dem GCC compilierst, müssen die Bibliotheken, die du verwendest, auch schon mit dem GCC übersetzt worden sein.

    Du hast eigentlich schon alles aufgezählt, was man machen kann. Für alles andere sehe ich schwarz. Der Borland C++ Compiler hatte mal ein Tool, welches Libraries konvertieren konnte. Wirklich funktioniert hat das aber nie.

    Am besten, du nimmst einen Compiler für Alles.



  • ProgChild schrieb:

    Du hast eigentlich schon alles aufgezählt, was man machen kann. Für alles andere sehe ich schwarz. Der Borland C++ Compiler hatte mal ein Tool, welches Libraries konvertieren konnte. Wirklich funktioniert hat das aber nie.

    Du meinst COFF2OMF? Das macht nicht, was du denkst:

    COFF2OMF schrieb:

    COFF2OMF will convert a COFF import library file (InputFile)
    to the corresponding OMF type import library file (OutputFile).

    Es geht nur um Import-Bibliotheken. Und die kann man auch mit IMPLIB direkt von der DLL erzeugen.

    Das Name-Mangling ist nur eines der Probleme, die sich beim Kombinieren mehrerer Compiler ergeben können. Weiter problematisch sind Alignment, Aufrufkonventionen, Exceptions, Mehrfachvererbung, Methodenzeiger, RTTI, virtuelle Basisklassen, VMT-Layout und bestimmt einige Dinge mehr, die ich vergaß.

    => Benutze ein C-Interface oder eine COM-Schnittstelle, oder laß es einfach bleiben und übersetze alles mit einem Compiler.



  • audacia schrieb:

    Du meinst COFF2OMF? Das macht nicht, was du denkst.

    Wird wohl so sein. Lang lang ist es her, dass ich mich damit beschäftigt habe. 🙂



  • ok dann muss ich das halt mit dem gcc übersetzen.

    habe jetzt mal die ganzen lib*.a teile dazugelinkt, doch er findet die funktionen
    trotzdem nicht:

    undefined reference to `InitCommonControlsEx(tagINITCOMMONCONTROLSEX*)@4'
    

    habe libcomctl32.a dazugelinkt.

    das ist nur ein fehler von vielen, ich hoffe das ich da nur eine kleinigkeit
    übersehen hab



  • Wie sieht der Aufruf zum Linker aus. Schreibe mal alle Fehlermeldungen, die du bekommst, wenn du ein minimales Beispiel übersetzen willst.



  • Das wirst Du nicht hinbekommen. Die Compiler machen genug anders, nicht nur was Namemangeling angeht.
    Alleine was die Excpetions betrifft und CRT Code der evtl. eingeflochten wird, wird es Dir kaum gelingen einen homogenen Objektcode hinterher zu bekommen.
    Es wird auch nicht möglich sein new über die Modul Grenzen hinweg verwenden zu können.


Anmelden zum Antworten