dll bzw. lib lässt sich nicht (Code::Blocks[gcc])



  • Hallo zusammen...

    Ich möchte ein kleines Programm schreiben, welches eine Firewire-Kamera ansteuert.
    Zur Ansteuerung der Kamera habe ich folgende Dateien:
    FGCamera.h, FGCamera.lib, FGCamera.dll

    Ich hatte vor einiger Zeit schonmal mit VS 2008 gearbeitet und da war die Nutzung der dll/lib kein Problem.

    Jetzt möchte ich gern mit Code::Blocks arbeiten. Und erhalte immer folgenden Fehler:

    -------------- Build: Debug in Test ---------------
    
    Compiling: main.cpp
    Linking console executable: bin\Debug\Test.exe
    obj\Debug\main.o: In function `main':
    C:/Dokumente und Einstellungen/.../CodeBlocks/Test/main.cpp:9: undefined reference to `__imp___ZN9CFGCameraC1Ev'
    C:/Dokumente und Einstellungen/.../CodeBlocks/Test/main.cpp:12: undefined reference to `CFGCamera::~CFGCamera()'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)
    2 errors, 0 warnings
    

    Das Programm dazu sieht übrigens wie folgt aus:

    #include <iostream>
    #include <FGCamera.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        CFGCamera   Cam;
    
        return 0;
    }
    

    Ich hab die FGCamera.lib eingebunden, indem ich auf das Projekt mit rechts geklickt hab -> Build options -> Linker Settings
    Und dann unter Link librarys "FGCamera" eingegeben hab (die Lib, sowie die Dll befinden sich im enstprechenden Verzeichnis von MinGW).

    Wenn ich statt "FGCamera" "FGCamera.lib" eingebe erhalte ich den Fehler

    -------------- Build: Debug in Test ---------------
    
    Compiling: main.cpp
    Linking console executable: bin\Debug\Test.exe
    C:\Programme\CodeBlocks\MinGW\bin\ld.exe: cannot find -lFGCamera.lib
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)
    1 errors, 0 warnings
    

    Wo liegt denn da der Fehler?
    Ich würde mich über euere Hilfe freuen 🙂



  • Welche Compiler verwendest du und für welchen Compiler ist die Lib?

    Wenn du unterschiedlich antwortest, dann sag ich dir, dass das dein Problem ist.



  • Also...
    Ich verwende den gcc, der da bei Code::Blocks dabei war.
    Für welchen Compiler die Libs sind?
    Ehrlich gesagt keine Ahnung... Mit dem VS 2008 haben sie super funktioniert. Also würde ich fast denken, dass sie dafür sind?

    Ich muss gestehen, dass ich irgendwie von ausgegangen bin, dass Libs für alle Compiler gehen... Dem ist nicht so ?! 😞

    Kann ich die Libs dann irgendwie "umwandeln"?
    Oder legt mich die Kamera dann auf den Compiler von VS fest ?



  • klar sind .libs nicht compilerspezifisch!

    FGCamera.lib bei "Link Libraries" in den Projekteinstellungen ist schon richtig.
    Aber finden tut er es nur, wenn der Ordner in den "Search directories" unter "Linker" steht (diesen Tab gibt es sowohl in den Projekteinstellungen, wie in Settings).

    Ich würde derartige Biblitheken immer in einem eigenen Pfad halten, und das MinGW-Verzeichnis unangetastet lassen.

    Für jede "derartige Bibliothek" fügst du dann include-Verzeichnis unter "Compiler", und lib-Verzeichnis unter "Linker" in den "Search directories" hinzu. Dann ist sie installiert.

    Im Projekt musst du dann immer noch die jeweilige .lib eintragen, wie du es in diesem Fall auch gemacht hast.



  • Mandel schrieb:

    Also...
    Ich verwende den gcc, der da bei Code::Blocks dabei war.
    Für welchen Compiler die Libs sind?
    Ehrlich gesagt keine Ahnung... Mit dem VS 2008 haben sie super funktioniert. Also würde ich fast denken, dass sie dafür sind?

    Ich muss gestehen, dass ich irgendwie von ausgegangen bin, dass Libs für alle Compiler gehen... Dem ist nicht so ?! 😞

    Richtig, eine C++-Library ist für jeden Compiler abhängig. Es geht sogar so weit, das es sogar von der Compiler-Version abhängt, wenn es z.B. der MSVC ist.

    Mandel schrieb:

    Kann ich die Libs dann irgendwie "umwandeln"?
    Oder legt mich die Kamera dann auf den Compiler von VS fest ?

    Ich kenne mich mit dem MinGW nicht so gut aus. Aber es gibt für diesen einen Tools-Download bei MingW.org, mit dem man MSVC-Libs in MinGW-Libs konvertieren kann. Ob das aber wirklich erfolgreich für dich sein wird, weiß ich nicht.

    Warum willst du denn unbedingt den MinGW nutzen, wenn du schon mit MSVC 2008 erfolgreich warst? Wenn es dir um die Kosten geht, kannst du auch die kostenlose Express Edition nutzen.
    Wenn es dir darum geht, unbedingt CodeBlocks zu nutzen, kannst du CB auch mit dem MS-Compiler nutzen. Kann man ja in CB einstellen. Es gibt den MS-Compiler auch im kostenlosen WindowsSDK (ohne MSVC-IDE). Der MinGW ist eh für die Windows-Entwicklung suboptimal.



  • Ich revidiere meinen vorigen Beitrag. Natürlich hat Archi recht, bezüglich der Kompilerspezifität. Unter gcc heißt das gleiche Konzept .a, nicht .lib.

    Ich hatte immer gedacht, der gcc kann auch mit .lib umgehen. Das ist scheinbar nicht der Fall...

    Trotzdem würde ich so eine Bibliothek wie gesagt in einem eigenen Verzeichnis halten, und wie beschrieben einbinden.


Log in to reply