highgui жалуется, что ему нужно> = 17.0.0, когда у меня 20.0 - PullRequest
0 голосов
/ 25 августа 2011

Это довольно уродливо, но я застрял, вот и все:

Я пишу динамическую библиотеку (далее «mylib.dylib»), которая использует opencv (highgui и другие части) ив конечном итоге загружается ffmpeg (libavfilter).Библиотека компилируется просто отлично.Но когда я пытаюсь выполнить dlopen () dylib из ffmpeg, я получаю следующую ошибку:

mylib.dylib: dlopen(mylib.dylib, 2): Library not loaded: /usr/local/lib/libpng15.15.dylib
  Referenced from: /usr/local/lib/libopencv_highgui.2.3.dylib
  Reason: Incompatible library version: libopencv_highgui.2.3.dylib requires version 17.0.0 or later, but libpng15.15.dylib provides version 16.0.0

Однако, когда я запускаю otool -L /usr/local/lib/libpng15.15.dylib Я получаю следующее:

/usr/local/lib/libpng15.15.dylib:
  /usr/local/lib/libpng15.15.dylib (compatibility version 20.0.0, current version 20.0.0)
  /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)

В последний раз, когда я проверял, 20.0.0 позже, чем 17.0.0, что, как сказал хай-гуй, требуется.

Я думалвозможно, это была проблема с архитектурой (я работаю на Mac под управлением Lion, поэтому я столкнулся с множеством проблем с i386 / x86_64), но запуск «file» во всех библиотеках показал, что все (highgui, libpng, mylib)is Mach-O 64-битная динамически связанная общая библиотека x86_64

Я подумал, что, возможно, в моей системе где-то скрывается какая-то версия libpng, но ошибка dlopen специально указывает на / usr /local / lib / libpng15.15.dylib

Очевидно, что здесь мне чего-то не хватает - по общему признанию, я не эксперт в том, как эти динамические библиотеки связываются.Так что, если я забыл включить соответствующую информацию, пожалуйста, извините.

ОБНОВЛЕНИЕ Я забыл упомянуть - библиотека работает нормально, когда я запускаю ffmpeg через XCode (без ошибки dlopen), что приводитЯ считаю, что это может иметь какое-то отношение к переменной среды, которую XCode устанавливает, а я нет.

Спасибо!

РЕШЕНИЕ 1. Не будьте глупы, я использовал MAMP и, поскольку я вызывал ffmpeg через скрипт php, он использовал свой собственный наборdylibs, включающий (неожиданный сюрприз) libpng 16.0.0

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Только для тех, кому нужен код:

cd  /Applications/MAMP/Library/lib
mv libpng15.15.dylib libpng15.15.dylib_old
ln -s /usr/X11/lib/libpng15.15.dylib .
1 голос
/ 25 августа 2011

У меня было нечто похожее недавно после того, как я удалил все свои MacPorts и установил обновленные версии. Проблема заключалась в версии libpng (1.2 против 1.4 против 1.5), а не только в версии совместимости. Я построил OpenCV против libpng 1.4 (это libpng14). Я подумал, что могу просто использовать install_name_tool, чтобы вместо этого посмотреть libpng 1.5 (libpng15), но это не сработало. Я перестроил OpenCV против текущих версий библиотеки. Это работало нормально (после того, как я вспомнил sudo cmake install).

(Некоторые номера версий выше могут быть неверными, но суть точна.)

Так что либо у вас нет версии libpng, которая была у вас изначально при сборке OpenCV, либо она построена на libpng, отличном от того, что был в / usr / local / lib (как, например, в / opt / local / lib) ). Если это так, вам нужно убедиться, что вы работаете с версией, которую хотите использовать. Как это сделать, зависит от вашего метода сборки (MacPorts или cmake). Я использую cmake для OpenCV и MacPorts для других библиотек, поэтому они не синхронизированы в моей системе.

...