shared objects
-
hi,
ich probiere grade aus, wie shared objects, also .so-Dateien genutzt werden. Leider habe ich noch nicht geschafft. Ich probiere, das ganze anhand eines Beispiels zu verstehen:
bill.c:
#include <stdio.h> void bill(char *arg) { printf("bill: you passed %s\n", arg); }
fred.c:
#include <stdio.h> void fred (int arg) { printf("fred: you passed %d\n", arg); }
programm.c:
#include <stdio.h> int main() { bill("Hello World"); exit(0); }
Mit Eclipse habe ich mir aus den ersten beiden Dateien eine "libtest.so"-Datei erstellen lassen. Nun möchte ich von programm.c aus auf die Funktionen in dieser Bibliothek zugreifen:
> cc programm.c libtest.so
die a.out wird erfolgreich erstellt. Aber bei der Ausführung erscheint die folgende Meldung
./a.out: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
Weiß jemand, was ich da falsch gemacht habe?
Gruß, zyx
-
-
guxt Du weidaaa....
Ne mal im Ernst:
Ich habe das Progrämmchen von Descartes ausprobiert. Ich erhalte beim Compilieren folgende Meldung:
> gcc -L. -o main_binary main.c -lhello
x86 compilation (/home/benutzer/temp)
/tmp/cc61a4pI.o(.text+0x1d): In function 'main':
main.c: undefined reference to 'hello'
collect2: ld returned 1 exit statusAlle Dateinamen und deren Inhalt wurde eins zu eins aus dem Beispiel übernommen...
Gruß, zyx
-
-
Wenn du das Beispiel 1:1 Übernommen hast, dann frag ich mich wieso du eine undefined Reference für hello erhälst. Du hast vielleicht hello() anstelle hellow() geschrieben (siehe Beispiel)
Naja, Punkt ist, dass man libraries anders linkt. Schau dir das -l-Flag an: http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Link-Options.html#Link-Options
-
wenn die lib nicht im standard-suchpfad für libs liegt, dann musst beim starten des programms folgende ENV-VAR entsprechend setzen:
LD_LIBRARY_PATHz.b. deine lib liegt in /home/test dann sieht der aufruf des programms so aus:
LD_LIBRARY_PATH=/home/test <programm>