Это довольно уродливо, но я застрял, вот и все:
Я пишу динамическую библиотеку (далее «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