Вы должны иметь возможность использовать install_name_tool
, чтобы изменить место, где cairo ищет свои библиотеки. (Я понятия не имею, что такое Каир. Я предполагаю, что это дизлиб. Если нет, моя уверенность в этом решении значительно снижается.)
Вот вымышленный пример, который вы должны уметь адаптировать.
Сначала, используйте otool -L
, чтобы увидеть, какие библиотеки использует Каир. В этом примере я работаю с libopencv_imgproc.2.3.1.dylib, но вместо этого вы будете использовать имя файла вашей библиотеки cairo:
$ otool -L libopencv_imgproc.2.3.1.dylib
libopencv_imgproc.2.3.1.dylib:
lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
Затем используйте install_name_tool -change
, чтобы изменить любой путь, который вам нужно изменить. Первый параметр - это текущий путь к библиотеке, второй - нужный путь к библиотеке, а третий - файл библиотеки. Я говорю это искать libz.1.dylib
в /Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/
вместо /usr/lib
:
$ install_name_tool -change /usr/lib/libz.1.dylib /Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libz.1.dylib libopencv_imgproc.2.3.1.dylib
Повторите это для каждой библиотеки, путь которой вам нужно изменить. otool -L
показывает нам, что изменение было сделано:
$ otool -L libopencv_imgproc.2.3.1.dylib
libopencv_imgproc.2.3.1.dylib:
lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
В моем примере (и, возможно, в вашем приложении) моя библиотека ожидает, что она окажется где-то кроме пакета приложений, поэтому мне нужно изменить это также с помощью install_name_tool -id
. Я копирую библиотеку в папку Frameworks моего пакета приложений, поэтому я советую посмотреть:
$install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_imgproc.2.3.1.dylib
Вы можете поместить вызовы install_name_tool
в фазу сборки Run Script. Если вы копируете библиотеку в папку Frameworks вашего пакета приложений, перед именем библиотеки необходимо добавить $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/
, чтобы скрипт мог найти библиотеку.