Причина:
Как и предполагалось, я использовал 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