Ответ 1
Установите libtiff4-dev:
sudo apt-get install libtiff4-dev
Я собираю библиотеку глубокого обучения Caffe в Ubuntu 14.04 (64 бит).
OpenCV (Version: 2.4.8+dfsg1-2ubuntu1
) устанавливается с сервера пакетов ubuntu с помощью:
sudo apt-get install libopencv-dev
Скомпилируйте Caffe
с помощью CMake 2.8.
Ошибка связи:
Связывание исполняемого cXX CXX -
/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.8: undefined ссылка на `[email protected]_4.0 '
Кажется, некоторые символы библиотеки TIFF не найдены. Я приложил некоторые усилия, чтобы найти причину (без везения). Вот некоторая информация о библиотеках.
Библиотека TIFF, связанная 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)
Импортировать символы 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)
Примечание. В именах символов есть один @
.
$nm -D libopencv_highgui.so.2.4.8 | grep TIFFOpen
U TIFFOpen
Экспорт символов 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 TIFFOpen @@LIBTIFF_4.0
Примечание. В именах символов есть два @
(@@
).
libtiff.so.5
имеет @@
в именах символов вместо @
, которые сделали ошибку привязки
libopencv_highgui.so.2.4.8: undefined ссылка на '[email protected]_4.0'
@
и @@
в именах символов?LIBTIFF_4.0
имен символов в libtiff.so.5
?libtiff4-dev
, который не предоставляется Ubuntu 14.04. Тогда почему ребята из Ubuntu помещают сломанный пакет на сервер пакетов.Я не профессия по компиляции и связыванию. Извините за такой длинный пост. Просто, чтобы предоставить достаточно информации для вас, ребята, чтобы помочь мне. Оцените любые предложения.
P.S. Если вам нужна дополнительная информация об этих libs, не стесняйтесь говорить в комментарии.
Установите libtiff4-dev:
sudo apt-get install libtiff4-dev
Это то, что сработало для меня: Перейдите на веб-сайт Tiff и следуйте инструкциям по загрузке Tiff и его созданию и установите его. Затем в вашем файле make добавьте следующее:
-L/[path to libtiff.so] -ltiff
Если вы хотите узнать путь к libtiff.so попробуйте следующее:
sudo find /usr/ -name libtiff.so
Старый вопрос, но все же без ответа, так вот он идет (сегодня я столкнулся с той же ошибкой):
Это не значит, что компоновщик терпит неудачу. Если бы он смог найти libtiff.so.5, он бы очень хорошо связался.
@vs @@- это просто способ отслеживания разностных версий функции. Подробнее здесь https://sourceware.org/binutils/docs/ld/VERSION.html
LIBTIFF_4.0 означает, что это определенная версия TIFFOpen, которая требуется при динамической загрузке символа.
Это, вероятно, хороший способ исправить проблему. Вероятно, что без пакета libtiff-dev символический связанный файл libtiff.so не выходит в/usr/lib/x86_64-linux-gnu/поэтому компоновщик не сможет найти библиотеку (он ничего не знает о libtiff. so.5, если вы не указали это явно).
а. Вы можете протестировать 4., вызывая командную строку компоновщика самостоятельно из командной строки. Если вы собрали caffe с cmake, вы найдете команду компоновщика под инструментами /CMakeFiles/caffe.bin.dir/link.txt. Просто добавьте /usr/lib/x 86_64-linux-gnu/libtiff.so.5 в командную строку, и он должен работать.
б. Альтернативно вручную создайте символическую ссылку /usr/lib/x 86_64-linux-gnu/libtiff.so
с. установите пакет dev, который должен сделать это для вас. Также убедитесь, что cmake знает о /usr/lib/x 86_64-linux-gnu/, указав дополнительный путь к библиотеке
д. убедитесь, что в вашей системе нет другой библиотеки libtiff.so, если предыдущие действия не работают (например, тип anconda)
Надеюсь, что это поможет.
У меня были похожие проблемы, и это произошло из-за того, что Anaconda испортила
Мне просто пришлось выполнить следующую команду:
conda remove libtiff
Я установил opecv через:
sudo apt-get install opencv-dev
и libtiff через:
sudo apt-get install libtiff4-dev
Как вы можете видеть в
62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]_4.0 (9)
есть a UND
, который, я думаю, означает undefined
. Я думаю, когда ubuntu создает libopencv_highgui
, он не может найти [email protected] 4.0
. Поэтому я думаю, что я должен иметь libtiff
под рукой и снова компилировать libopencv_xxx
.
Мне нравится включать вещи в конду. Поэтому я снова устанавливаю opencv с conda и указываю my LIBRARY_PATH
на каталог conda lib, и все идет хорошо.