link .so und .a
-
Hallo an alle. Ich habe hier folgendes Problem. Meine .so datei benutzt Funktionen welche in .a datei sich befinden.
Gibt es einen Befehl mit dem ich der .so datei sage wo die Funktionen zu finden sind?Habe bereits lange gegoogelt und nichts passendes gefunden ich muss eigentlich nichts compilleren sondern nur die dateien verbinden.
Vielen Dank
-
Was machst du und wie lautet die Fehlermeldung?
-
also mein Program lädt die A.so dynamisch. Diese A.so benutzt funktionen aus B.a
aber die Symbole sind undefined. zB mit ld A.so sehe ich folgende meldung:
A.so: undefined reference to `funcName'
-
Was ist, wenn du B.a statisch zu deinem Programm linkst?
also mein Program lädt die A.so dynamisch.
Mittels dlopen? Ansonsten B.a bei Uebersetzen der A.so hinzufuegen.
-
Ich habe das gleiche Problem, habe schon alles ausprobiert was ich im Internet an Lösungen finden konnte, aber die Fehlermeldung erscheint immer wieder. Was mache ich falsch?
Danke im schon mal Voraus.
-
wiso linkst du die B.a nicht zu der A.so?
-
Wieso linkst du das nicht gleich beim Kompilieren dazu?
#Makefile projekt: projekt-dateien gcc -L . $^ -ldeineLib -o $@
Bei -L gibst du den Ordner der statischen Lib an und bei "-ldeineLib" wird erwartet, dass deine Lib "libdeineLib" heißt.
L. G.
Steffo
-
Steffo schrieb:
Wieso linkst du das nicht gleich beim Kompilieren dazu?
Das was du da beschreibst ist Linken.
-
SeppJ schrieb:
Steffo schrieb:
Wieso linkst du das nicht gleich beim Kompilieren dazu?
Das was du da beschreibst ist Linken.
Die Option "-o" kann aber auch implizit kompilieren, deswegen "linken beim Kompilieren".
-
-o gibt bloß die ausgabedatei an, egal was du machst. Das hat nichts mit compilieren oder linken zu tun. Mit -o kannst du auch direkt wieder den Quelltext in eine andere Datei schreiben, wenn du bloß die anderen Schalter so setzt, dass einfach nix gemacht wird.
Der gcc ist eben ein Rundumsorglospaket, das in dem gleichen Programm Präprozessor, Compiler, Optimierer, Assembler und Linker vereint hat (wobei dahinter aber durchaus teilweise eigene Executables stehen) und daher auch in der Lage ist, alles in einem Rutsch zu machen, so dass es für den Nutzer wie ein einziger Schritt aussieht. Ist es aber nicht.