*.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 funktioniertich 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 angebenich 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