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.

Ich bin kein Experte für Bau - & Verknüpfung unter Linux und haben oft ähnliche Probleme zu verkaufen. Allerdings, was ich kann tun, ist zu empfehlen, die folgenden hervorragenden Artikel über den Umgang mit shared libraries, die auf IBM DeveloperWorks: [das Sezieren von shared libraries - kennen Sie Ihre gemeinsam genutzte Bibliothek (von Peter Seebach)][seebach]. Die Sektion "Ändern der dynamische linker-Suchpfad" möglicherweise gerade für Sie von Interesse. [seebach]: ibm.com/developerworks/linux/library/l-shlibs.html

InformationsquelleAutor Stick it to THE MAN | 2010-02-18

Schreibe einen Kommentar