Visual Studio Projekt mit Code::Blocks' GNU GCC Compiler kompilieren



  • Ich habe einen Software-SDK einer Firma für eine Kamera erhalten. Mit Visual-Studio 2008 Express kann ich die Header- und Lib-Dateien super einbinden und das Programm kompilieren. Wenn ich allerdings mit Code::Blocks arbeite und dort den GNU GCC-Compiler in den Build-Options einstelle, kann ich das Projekt nichtmehr kompilieren, obwohl ich die Header- und Lib-Dateien genauso eingebunden habe. Ich hab mich schon viel im Internet umgesehen und aber keine wirklich passende Antwort gefunden. Meiner Meinung nach kann der GCC-Compiler nicht mit den Visual-Studio lib-Dateien umgehen, aber ich hab keine Ahnung, wie ich das ändere oder wie ich die begelegten dll-Dateien, die ja offensichlich auch etwas damit zu tun haben, ordnungsgemäß einbinde.



  • Den Smart-Questions-Link spare ich mir frei von der Seele, aber fragen muß ich schon: was heißt

    kann ich das Projekt nichtmehr kompilieren

    ?
    Wie äußert sich das?

    Meiner Meinung nach kann der GCC-Compiler nicht mit den Visual-Studio lib-Dateien umgehen, aber ich hab keine Ahnung, wie ich das ändere oder wie ich die begelegten dll-Dateien, die ja offensichlich auch etwas damit zu tun haben, ordnungsgemäß einbinde.

    Die GCC-Varianten heißen lib.a*. Für DLL's reicht es normalerweise, daß sie im gleichen Ordner sind.



  • Erstmal bedanke ich mich für deine Antwort! 🙂
    Naja, als Fehler wird ausgegeben, dass der Compiler nicht kompatibel ist.
    Hier mal ein Ausschnitt, falls das hilft:

    // gc base import/export
    #ifdef GCBASE_EXPORTS
      #define GCBASE_API __declspec( dllexport )
    #else
      #define GCBASE_API __declspec( dllimport )
    #endif
    
    #elif defined (__GNUC__)
    
    #if (__GNUC__ >= 4) && defined (__linux__)
    #include <limits.h>
    #include <stdint.h>
    #define GCBASE_API
    #else // (__GNUC__ >= 4) && defined (__linux__)
    #error Unsupported compiler or platform
    #endif // (__GNUC__ >= 4) && defined (__linux__)
    

    Wie kann ich denn meine .lib Dateien in das lib.a Format des GCC-Compilers umwandeln?



  • Wie kann ich denn meine .lib Dateien in das lib.a Format des GCC-Compilers umwandeln?

    Schwierig. Der GCC muß seine eigenen Bibliotheken mitbringen. Einfach mal im Code::Blocks-Ordner nach *.a suchen.

    Der Compiler ist nicht kompatibel? Seltsam, denn der Codeausschnitt zeigt doch, daß die damit gerechnet haben, daß man den GNU-Compiler verwendet. Kommt als Fehlermeldung die aus Zeile 15?



  • Wie kann ich denn meine .lib Dateien in das lib.a Format des GCC-Compilers umwandeln?

    Falls du aber nicht die Bibliotheken des Compilers meinst, sondern welche, die du selbst geschrieben hast: die musst du einfach nur neu übersetzen.



  • Genau, er bringt die Fehlermeldung aus Zeile 15. Es lagen bei dem Quellcode mehrere .lib Dateien bei. Diese müssten demnach in lib.a Dateien umgewandelt werden. Aber wie geht das?



  • Wäre natürlich gemein, wenn die zum Quellcode auch binären Code liefern würden. Aber wer weiß schon, wozu diese Dateien gut sind?

    Jedenfalls sagt mir Zeile 10, daß man das ganze unter Linux mit dem gcc übersetzen kann (oder können sollte). Dazu wäre es aber seltsam, wenn nur Windows-Libs dabei wären. Vielleicht braucht man die aber auch nur für Windows, who knows?

    Jedenfalls deutet der Name *.lib auf Windows-Code hin:
    http://en.wikipedia.org/wiki/Library_(computing)#Naming

    Ist ein Makefile dabei?
    Ist es ein Canon-Fotoapparat?



  • Nein, es ist kein Canon-Fotoapparat. Es ist eine Kamera der Firma MaxxVision, die für Bildverarbeitung eingesetzt wird.
    Bei den Source-Code des SDK`s liegt kein Makefile bei, dafür aber bei ein paar von den headerdateien. Ich denke, dass ich mit den DLL-Dateien und den headerdateien bestimmt die lib-Dateien neu übersetzen muss, aber wie geht das?



  • es gibt eine moeglichkeit aus DLL-dateien mingw-kompatible .a library dateien zu machen.

    als erste anlaufstelle haette ich mal das hier, glaube das sollte sogar ausreichen (ab "The resulting DLL will"):

    http://www.geocities.com/yongweiwu/stdcall.htm

    //EDIT:

    das hier sieht einfacher aus, zudem kein unixtools/linux notwendig:

    http://oldwiki.mingw.org/index.php/CreateImportLibraries



  • Irgendwie bekomme ich das nicht gebacken, zumal ich ja nicht weiß, wie die originalen *.lib Dateien intern aufgebaut sind und ich ja diese eigentlich ersetzen will. Gibt es denn keine Möglichkeit diese .lib Dateien zu konvertieren in das lib.a-Format des gcc-Compilersß



  • also manche DLL und LIB dateien kann mingw direkt.

    aber der weg den ich dir aufgezeigt habe ist ja genau um die .lib-dateien mit .a-dateien zu ersetzen, aber das machst du nicht indem du die .lib zu .a konvertierst, sondern .a aus .dll generierst.

    //EDIT: hast du denn mal probiert ob du die DLLs hart direkt reinlinken kannst?



  • Nein, hab ich noch nicht und wenn ich ehrlich bin, dann sträube ich mich ein wenig dagegen, da es recht viele sind 😞 . Muss dann in jeder Header-Datei die jeweilige DLL eingebunden werden oder kann man das zentral machen? Von sowas hab ich absolut keine Ahnung. Oder muss man sogar jede Methode und Klasse aus den DLL`s einzeln einbinden?
    (Und immer wieder herzlichen Dank, für deine Hilfe 🙂 )



  • naja, die graue theorie sagt:

    normales kompilieren und linken 'libfoo' (libfoo.a):

    gcc -o executable.exe file1.c file2.c file3.c -lfoo
    

    normales kompilieren und linken einer foo.lib:

    gcc -o executable.exe file1.c file2.c file3.c foo.lib
    

    (nicht sicher, aber glaube das geht manchmal)

    kompilieren und linken einer dll:

    gcc -o executable.exe file1.c file2.c file3.c foo.dll
    

    das problem: das geht kaum direkt in codeblocks, da muesstest du schon den gcc auf commandline bedienen.

    dadurch waehre das konvertieren LIB aus DLL der einfachere weg.



  • zum "nicht gebacken bekommen":

    einfach fuer jede DLL fuer die es auch eine .lib gibt das hier machen:

    dlltool -l libfoo.a libfoo.dll
    

    (natuerlich in einem ordner in dem die libfoo.dll zu finden ist)

    ausser du meinst mit "nicht gebacken bekommen" eine fehlermeldung, aber falls dem so ist solltest du an deiner ausdrucksweise arbeiten.



  • Ich hab das perfekte tool gefunden. Im MinGW-Ordner befindet sich ein tool namens reimp mit dessen Hilfe man *.lib-files in *.a-files umwandelt. Dennoch löst das in keinster Weise mein Problem. Der Compiler gibt noch immer den gleichen Fehler aus obwohl ich jetzt alle Datein eingebunden habe. Wahrscheinlich liegt es wohl doch nicht an den Biblotheks bzw. fehlenden Dll-Datein.



  • hm, in ermangelung einer fehlermeldung kann ich dazu nur folgendes sagen:

    lol



  • Naja, die Fehlermeldung und der Code stehen auf der ersten Seite. Kannst du damit etwas anfangen?



  • Benutze doch einfach den MS-Compiler. 🙄 Oder ist MS sooo böse, das man nicht mal den Compiler benutzten will?


Log in to reply