2015-03-26 3 views
10

Problem

ich die tiefen Lernbibliothek Caffe in Ubuntu 14.04 (64 Bit) zu kompilieren.Fehler Verknüpfung mit `libopencv_highgui.so` unter Ubuntu 14.04, seltsames Ergebnis mit` libtiff.so.5`

OpenCV (Version: 2.4.8+dfsg1-2ubuntu1) aus ubuntu Pakete Server installiert:

sudo apt-get install libopencv-dev

Compilieren Caffe mit CMake 2.8.

Verknüpfung Fehler:

Linking CXX executable caffe-

/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.8: undefined reference to `[email protected]_4.0'

Infomation

Es scheint einige Symbole von TIFF-Bibliothek nicht gefunden wurden. Ich habe mich bemüht, den Grund zu finden (ohne Glück). Hier finden Sie einige Informationen über die Bibliotheken.

TIFF-Bibliothek verknüpft durch libopencv_highgui.so.2.4.8

$ ldd libopencv_highgui.so.2.4.8 | grep tiff

libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f978313b000)

Import Symbole von libopencv_highgui.so.2.4.8

$ readelf -s libopencv_highgui.so.2.4.8 |grep TIFFOpen

62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]_4.0 (9)

Hinweis: Es gibt einen einzigen @ in den Symbolnamen ist.

$ nm -D libopencv_highgui.so.2.4.8| grep TIFFOpen

U TIFFOpen

Export Symbole von libtiff.so.5:

$ nm -D /usr/lib/x86_64-linux-gnu/libtiff.so.5

0000000000000000 A LIBTIFF_4.0

...

00000000000429f0 T TIFFOpen

...

$ readelf -s /usr/lib/x86_64-linux-gnu/libtiff.so.5|grep TIFFOpen

99: 00000000000429f0 239 FUNC GLOBAL DEFAULT 12 [email protected]@LIBTIFF_4.0

Hinweis: Es gibt zwei @ (@@) in den Symbolnamen.

Meine Verwirrung

  1. Ist es, weil libtiff.so.5@@ in den Symbolnamen hat statt @, die die Verknüpfung Fehler gemacht

    libopencv_highgui.so.2.4.8: undefined reference to '[email protected]_4.0'

  2. What's the difference between @ and @@ in symbol names?
  3. What's the meaning of the suffix LIBTIFF_4.0 of symbols names in libtiff.so.5 ?
  4. Many people said it's because OpenCV need libtiff4-dev which is not provided by Ubuntu 14.04. Then why the Ubuntu guys put a broken package on the package server.
  5. How to solve the linking problem?


Ich bin kein Beruf zum Kompilieren und Linken. Entschuldigung für solch einen langen Beitrag. Nur was, um genug Informationen für Sie bereitzustellen, um mir zu helfen. Schätzen Sie für irgendwelche Vorschläge.

P.S. Wenn Sie weitere Informationen zu diesen Bibliotheken benötigen, können Sie dies im Kommentar tun.

+0

Zu lange, können Sie Ihren Beitrag prägnant machen? –

+0

Jetzt ist es prägnanter. @Golazo – nn0p

+0

Haben Sie am Ende dieses Problem gelöst? Wenn ja, könnten Sie bitte die Lösung beschreiben. Vielen Dank! – Josh

Antwort

1

installieren libtiff4-dev:

sudo apt-get install libtiff4-dev

+1

Eigentlich habe ich versucht, Version 4 zu installieren. Aber das hat das Problem nicht gelöst. Die Bibliothek, nach der libopencv_highgui.so.2.4.8 suchen soll, ist libtiff.so.5. Ubuntu 14.04 stellt übrigens libtiff4 nicht zur Verfügung. [libtiff4-dev-Dateien] (http://packages.ubuntu.com/trusty/amd64/libtiff4-dev/filelist). Es sei denn, ich kompiliere OpenCV für mich. – nn0p

1

Dies ist, was für mich gearbeitet: zu Tiff website gehen, und folgen Sie den Anweisungen Tiff herunterladen und bauen und installieren.Dann in Ihrem Make-Datei hinzufügen:

-L/[path to libtiff.so] -ltiff 

Wenn Sie den Pfad zu dem libtiff.so wissen wollen versuchen Sie dies:

sudo find /usr/ -name libtiff.so 
1

alte Frage, aber immer noch ohne Antwort, so geht es hier (Ich bin heute auf denselben Fehler gestoßen):

  1. Das ist nicht der Grund, warum der Linker nicht funktioniert. Wenn es libtiff.so.5 finden konnte, hätte es gut funktioniert.

  2. @ vs @@ ist nur eine Möglichkeit, verschiedene Versionen der Funktion zu verfolgen. Weitere Details finden Sie hier https://sourceware.org/binutils/docs/ld/VERSION.html

  3. LIBTIFF_4.0 bedeutet, dass diese spezifische Version von TIFFOpen beim dynamischen Laden des Symbols benötigt wird.

  4. Das ist wahrscheinlich ein guter Weg, um das Problem zu beheben. Es ist wahrscheinlich, dass ohne das libtiff-dev-Paket die symbolische libtiff.so-Datei nicht in/usr/lib/x86_64-linux-gnu/endet, so dass der Linker die Bibliothek nicht finden kann (er weiß nichts über libtiff). so.5, wenn Sie es nicht ausdrücklich sagen).

  5. a. Sie können möglicherweise 4. testen, indem Sie die Linker-Befehlszeile von der Befehlszeile aus aufrufen. Wenn Sie caffe mit cmake kompiliert haben, finden Sie den Linker-Befehl unter tools/CMakeFiles/caffe.bin.dir/link.txt. Füge einfach /usr/lib/x86_64-linux-gnu/libtiff.so.5 zur Kommandozeile hinzu und es sollte funktionieren.

    b. Alternativ können Sie den symbolischen Link /usr/lib/x86_64-linux-gnu/libtiff.so manuell erstellen

    c. installiere das dev-Paket, das sollte das für dich tun. Stellen Sie außerdem sicher, dass cmake über/usr/lib/x86_64-linux-gnu/informiert, indem Sie einen zusätzlichen Bibliothekspfad angeben

    d. überprüfen, dass es keine andere libtiff.so Bibliothek lauern in Ihrem System vorhanden sind, wenn die vorherigen Schritte nicht funktionieren (z anconda Typ Sache)

Hoffe, es hilft.

1

hatte ich similiar Probleme und es war zu Anaconda aufgrund up Messing

ich einfach den folgenden Befehl ausführen musste:

conda remove libtiff 

ich über installierte opecv:

sudo apt-get install opencv-dev 

und libtiff über:

sudo apt-get install libtiff4-dev 
0

Wie Sie in

62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]_4.0 (9) 

gibt es eine UND die ich denke, Mittel undefined sehen kann. Ich denke, wenn Ubuntu libopencv_highgui produziert, kann es [email protected] 4.0 nicht finden. Also ich denke ich sollte libtiff zur Hand haben und libopencv_xxx nochmal kompilieren.

Ich mag Dinge in Conda enthalten. Also installiere ich opencv wieder mit conda, und zeige meine LIBRARY_PATH auf das Verzeichnis conda lib und die Dinge laufen gut.