*.so-files mit gcc linken



  • ich hab ein shared object mit dem gcc compilirt und
    wollte es zu einem anderen programm dazulinken...
    hat aber nicht funktioniert 😢

    ich dachte eigendlich mit dem switch -l wird eine *.so datei gelinkt
    die der compiler kennt und mit -L kann man den gesamten pfag zur datei angeben

    ich hab das so gemacht

    SHARED_OBJECT = "/home/name/desktop/.../shared_lib.so"
    
    programm: main.cpp shared_object.h
        gcc -Wall -o name main.cpp -L$(SHARED_OBJECT)
    

    funktioniert aber nicht muss ich da noch irgend ne andere
    option wählen??

    mfg
    Plassy



  • Mit -L gibst Du nur einen zusätzlichen Suchpfad für Libs an - -l musst Du trotzdem machen damit der gcc weiß, zu welcher lib er linken soll.

    edit: Die Lösung dafür wäre daher:

    SHARED_OBJECT_DIR = "/home/name/desktop/.../"
    SHARED_OBJECT = "shared_lib.so"
    
    programm: main.cpp shared_object.h
        gcc -Wall -o name main.cpp -L$(SHARED_OBJECT_DIR) -l$(SHARED_OBJECT)
    

    [ Dieser Beitrag wurde am 06.03.2003 um 23:05 Uhr von nman editiert. ]



  • hmm.. das funktioniert auch nicht
    es kommt immer der fehler:

    /usr/lib/gcc-lib/i486-suse-linux/3.2/../../../../i486-suse-linux/bin/ld: cannot find -lgui.so
    

    anscheinend sucht er nicht in dem verzeichnis das ich angegeben hab.
    das verzeichnis existiert aber!
    mein makefile:

    OBJECTS   = main.o
    COMPILER  = gcc
    
    PTH_GUI   = "/home/silvio/Desktop/projects/GlutUI"
    LIB_GUI   = "gui.so"
    
    LIBRARIES = -l$(LIB_GUI) -lGL -lGLU -lglut
    SWITCHES  = -Wall -o only 
    
    programm:   $(OBJECTS)
                $(COMPILER) $(SWITCHES) $(OBJECTS) -L$(PTH_GUI) $(LIBRARIES)  
    
    main.o:     main.cpp gui.h
                $(COMPILER) -c main.cpp
    

    mfg
    Plassy

    [ Dieser Beitrag wurde am 07.03.2003 um 10:18 Uhr von Plassy editiert. ]



  • Sorry, ich habe Dir Blödsinn erzählt, ich sehs gerade...
    Wenn Du zu libqt.so linken möchtest gibst Du normalerweise ja "-lqt" an.

    Aus der gcc-Info:

    The linker searches a standard list of directories for the library,
    which is actually a file named `libLIBRARY.a'. The linker then
    uses this file as if it had been specified precisely by name.

    [ Dieser Beitrag wurde am 07.03.2003 um 11:35 Uhr von nman editiert. ]



  • Normalerweise so:

    gcc -Wall -o name main.cpp -l<LIBRARY OHNE DAS "LIB">
    oder
    gcc -Wall -o name main.cpp -l<VOLLER PFAD ZUR *.so DATEI>

    Im ersten Fall muss die Bibliotheksdatei
    a) im Library Suchpfad gefunden werden können (eventuell das passende Verzeichnis in die Variable LD_LIBRARY_PATH aufnehmen) und
    b) sie muss zwingend mit "lib" beginnen (z.B. "lib<Dateiname>.so")
    Nur wenn beides erfüllt ist, kannst du mit der Option -l<Dateiname ohne führendes "lib" und ohne *.so Endung> linken.

    Alternativ kannst du bei dem Parameter -l auch den kompletten Pfad auf die *.so Datei angeben:
    gcc -Wall -o name main.cpp -l/home/name/desktop/.../shared_lib.so


Anmelden zum Antworten