Ошибка компоновщика в двоичных файлах OpenCV C ++ после переустановки anaconda - PullRequest
0 голосов
/ 06 ноября 2019

Я переустановил Python Anaconda, и теперь мои ранее скомпилированные приложения C ++ OpenCV больше не работают.

Когда я пытаюсь запустить мои двоичные файлы, я получаю следующую ошибку:

dyld: Library not loaded: @rpath/libhdf5.101.dylib
  Referenced from: /usr/local/lib/libopencv_hdf.4.0.0.dylib
  Reason: image not found
[1]    5054 abort      ./test

Насколько далеконасколько я понимаю, это означает, что библиотека opencv пытается использовать другую динамическую библиотеку hdf5 во время выполнения, но компоновщик не может ее найти.

1 Ответ

0 голосов
/ 07 ноября 2019

Причина:

Как и предполагалось, я использовал otool -l /usr/local/lib/libopencv_hdf.4.0.0.dylib и проанализировал его вывод. Там я обнаружил, что последний LC_RPATH указал на мою старую установку анаконды, в моем случае ~/anaconda3/lib. Таким образом, кажется, что OpenCV, как я его и построил, использует HDF5 dylib из моей установки anaconda. Даже двоичные файлы C ++ полагаются на мою установку Python Anaconda для этого. Ранее я искал только недостающую библиотеку под /usr/local/lib, которая не дала никаких результатов. Когда я удалил свою старую версию anaconda и установил более новую, я не только удалил библиотеку, но теперь anaconda устанавливает и по другому пути (теперь ~/opt/anaconda вместо ~/anaconda).

Решение:

Полагаю, очевидным решением было бы изменить @rpath на libopencv_hdf.4.0.0.dylib, чтобы он указывал на новую установку. Однако более новая версия ancaonda поставляется с более новой версией libhdf5 и, следовательно, с другим именем файла.

Вместо этого я создал программную ссылку в одном из мест @rpath, чтобы указать на новую установку библиотеки.

Обе версии работают. Так что либо:

ln -s ~/opt/anaconda3/lib/libhdf5.103.dylib /usr/local/lib/libhdf5.101.dylib

или (при условии, что вы создали необходимые каталоги):

ln -s ~/opt/anaconda3/lib/libhdf5.103.dylib ~/anconda3/lib/libhdf5.101.dylib

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...