ld Verknüpfung Probleme: /usr/bin/ld: cannot find [Bibliotheksname]
Im mit Qmake zum erstellen einer shared library unter Ubuntu 9.10
Diese shared library (Eine) hat eine Abhängigkeit auf eine andere gemeinsam genutzte Bibliothek (B).
Projekt B wurde erfolgreich erstellt.
in der .pro Datei für das Projekt Ein, meine LIBS-variable sieht wie folgt aus:
LIBS += -L../datelib/bin -llibdatelib_release.so.1.0.0
(Ich habe die volle shlib Namen, weil die library-Versionen unterschiedlich sind.)
In jedem Fall, wenn ich versuche zu bauen, Ein Projekt, bricht es an der Verknüpfung Bühne, und druckt die Fehlermeldung:
/usr/bin/ld: cannot find -llibdatelib_release.so.1.0.0
collect2: ld returned 1 exit status
make[1]: ***[bin/libprojecta_release.so.6.0.0] Error 1
make ***[release] Error 2
Exited with code 2
Aus der Fehlermeldung, ich dachte ld wurde beklagt, dass es nicht finden konnte, die libdatelib-Datei, so dass ich manuell kopiert es nach /usr/lib/
jedoch, dass sich das problem nicht lösen, und ich bekomme die gleiche Fehlermeldung.
Weiß jemand, wie man dieses Problem beheben?
[Bearbeiten]
Ich bin ganz neu zu bauen, mit dem gcc Compiler. Ich weiß, wie man erstellen Sie symbolische links, aber die Pfade verwende ich für die lnk-Befehl?. Die Datei, die ich verbinden möchte, ist in /home/username/Arbeit/cppdev/datelib/bin.
Auch die build-system verwende ich (qmake), automatisch erstellt symbolische links als Teil des build, also ich habe bereits die folgenden Dateien in mein /home/username/Arbeit/cppdev/datelib/bin-Ordner:
- libdatelib_release.so (sym-link)
- libdatelib_release.so.1 (sym-link)
- libdatelib_release.so.1.0 (sym-link)
- libdatelib_release.so.1.0.0 (shared lib)
Vielleicht habe ich eine andere Frage stellen, um zu erklären, warum es so viele symbolische Links (was ist der Punkt?), und warum kann ich nicht einfach ein link direkt zu einem shared-lib, sondern über einen symbolischen link. Ich habe einige online-docs, aber was ich bisher gesehen habe, scheint eher wie dictum/tradition eher als tatsächliche technische Gründe, WARUM diese Ebene der Abstraktion ist erforderlich, wenn die Verknüpfung auf Linux.
InformationsquelleAutor Stick it to THE MAN | 2010-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden,- l, Weg. -l kann nur Dinge finden, mit Namen wie libFOO.also, über -lFOO. Sie müssen einen symbolischen link ohne Versionsnummer, wenn Sie wollen, um es zu spezifizieren, wie dies in der build.
Etwas wie:
Nun -lthing arbeiten.
InformationsquelleAutor bmargulies
Den prefix 'lib' wird automatisch Hinzugefügt, um den Namen der Bibliothek - Verwendung:
InformationsquelleAutor
Können Sie vollständigen Pfad. also
Allerdings würde ich dir empfehlen das zu tun, was bmargulies vorgeschlagen: erstellen symolic link und add-ldatelib_release
InformationsquelleAutor Artyom