*.lib nach *.a konvertieren (glew mit mingw nutzen)



  • Hi! leider kommt glew nur mit *.lib dateien die ich mit mingw nicht richtig linken kann.
    weiß jemand von euch wie ich glew mit mingw nutzen kann oder wie ich diese *.lib dateien die mit glew kommen in *.a dateien konvertieren kann?



  • Mir ist jetzt kein Programm bekannt, das das kann. Wenn du aber .DLL-Dateien hättest, könntest du Importlibraries selbst erstellen (Google: pexports dlltool), aber bei statischen Libraries sollte das, meines Wissens nach, nicht möglich sein.



  • Das hängt hauptsächlich davon ab was die *.lib Dateien enthalten. Es sind an sich ja nur Archive. Wenn dies Objektdateien sind dann sieht es schlecht aus.



  • selbes Problem hier....

    meine libraries sind aber ein interface auf eine DLL... kann mir irgendjemand genauer erklären, wie das geht? also ich z.Zt. ein header *.h + *.lib Dateien, weobie die Bibliothek nur ein interface auf eine Dll darstellt (mit msvc 2005 erstellt also ich selbst hab die DLL nicht erstellt.. ich hab sie einfach nur....) jetzt würd ich gerne die *.lib in *.a konvertieren :). also Einfach Dateinamen umändern geht nicht... (Schade eiegtnlcih, daß die nicht dieselben Stnadarts benutzen ^^). Wäre schön, wenn mir da jemand genaueres zu sagen könnte, denn mit google und search-funktion hab ich leider nix gefunden :).

    Grüße, Tom



  • geht da nix mit coff2omf oder omf2coff?



  • so mittlerweile hab ich rausgefunden... das geht mit den tools "reimp" und "dlltool" aus den mingw binutils. Ich krieg jetzt immerhin die konvertierung schonma hin.. leider findet der compiler die relevanten referenzen in den Bibliotheken immer noch nicht...

    ich probier nochmal 'n bsichen weiter rum... falls jemand helfen will:

    http://www.mingw.org/mingwfaq.shtml

    hier gibts die dazugehölrige faq.. einfach nach "reimp" suchen und ihr kommt an die relevante Stelle in der FAQ.

    Grüße, Tom



  • ok:

    ich glaub ich hab den Fehler.. weiß allerdings nicht, wie ich ihn beheben soll...

    In der "konvertierten" Version der Library heißen die Funktionen alle

    Funktion1@4
    Funktion2@12
    Funktion3@....

    immer mit diesem komischen "@" am Ende... der Linker allerdings sucht nach den Funktionen ohne das "@"...

    kennt sich jemand damit aus ? Ich hab versucht mit dme *.def file für dlltool die Funktionen manuell umzubennen, das scheint aber auch nicht funktioniert zu haben.

    Grüße, Tom



  • AHH ich habs Zumindets ein Teil des Problms ist behoben... vielleicht sollt eihc das nächste mal etwas geduldiger sien, bevor ich ne Frage poste...

    Also hier die Lösung für statische Bibliotheken... (wenns einen eleganteren Weg gibt, dann bitte hier bescheid geben, denn das hier ist eine arme-Leute-Lösung, nix tiefergehendes 🙂 ) (ich hoffe es hilft noch vielen Leuten weiter, denn dazu gibts absolut nix in google.... ^^)

    1. ersteinmal mit reimp das *.def file, welches dlltool benötigt, um die library zu konvertieren, erzeugen.

    2. Das Projekt einfach mal ohne die Bibliotheken konvertieren und gucken wie die Funktionen heißen, die in der Bibliothek referenziert werden sollen. Wenn der Sourcecode keine syntaxfehler etc mehr aufweisst sollten die Namen in der Fehlermeldung auftauchen( (Hoffentlich sinds nicht zu viele, dann wirds mühsam...)

    3. das erzeugte *.def file öffnen und die Funktionsnamen dadrin die Funktionsnamen den Funktionsnamen aus den Fehlermeldungen anpassen.

    4. mit folgendem Befehl die library erzeugen:

    dlltool -U -d testlib.def -l libtestlib.a

    Also bei mir hats dann Funktioniert....

    Bleibt noch das Problem mit der DLL. Denn DIe Namen mit dem "@" scheinen die Referenzen aus der DLL zu sein. Die Libraries, die auf eine DLL verweisen funktionieren deswegen leider immer noch nicht, Denn nachdme ich die nNmaen unbenannt hat sucht er jetzt in der DLL nach Referenzen ohne "@" und "_" .

    Grüße, Tom



  • @ gehört zu C++ um überladene Funktionen anhand der Parametertypen unterscheiden zu können

    _ ist der führende Unterstrich von C (und C++ höchstwahrscheinlich), es gibt aber Möglichkeiten beides durch den Compiler zu unterdrücken



  • der threat ist zwar schon etwas älter....aber:
    bei glew sind zwar keine .a dateien dabei, die man für mingw braucht, es gibt aber noch die möglichkeit (und das scheint mir hier einfacher als das beschriebene verfahren) die .a dateien mit hilfe der sourcen selber zu kompilieren. die sourcen gibts hier: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-src.zip

    vielleicht hilfts noch jemandem 😉



  • was auch funktioniert, ist ganz einfach als lib die "glew32" anzugeben und in den angegebenen ordner nicht die glew32.lib sondern glew32.dll zu kopieren. in dem verzeichnis darf dann aber nur die dll und nicht die lib sein..sonst gehts scheinbar nicht



  • Danke für den Tipp mit der DLL.
    Ich war erst skeptisch, habs aus Verzweiflung aber trotzdem probiert und es hat funktioniert.
    Erschreckender Weise hat es mit einer durch reimp aus der .lib erzeugten .a Datei trotzdem Fehler gegeben.
    Mit der DLL hingegen nicht.


Anmelden zum Antworten