Редактировать: Я перечитал ваш вопрос после написания этого ответа. Поскольку вы создаете только dylib, а не исполняемый файл, вам нужно всего лишь использовать команду install_name_tool -id
. Я не верю, что вы можете сказать ему искать себя там, где он находится. Я думаю, что вы должны дать ему путь. В этом примере он выглядит по пути Frameworks пакета приложения, что является довольно разумным местом для поиска.
Вы должны изменить как путь, по которому ваше приложение ищет файл, так и путь, по которому библиотека ожидает себя найти. Вот пример, где я использую три библиотеки OpenCV.
Эти первые строки указывают приложению искать библиотеки в папке Frameworks пакета приложения. ($BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH
- это комбинация переменных среды, которые определяют исполняемый файл.)
#Fix references in executable
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib $BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH
install_name_tool -change lib/libopencv_highgui.2.3.dylib @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib $BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH
Я получил первый параметр (lib/libopencv_core.2.3.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)
/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)
Эти следующие строки говорят библиотекам искать себя в папке Frameworks .
#Fix install location in libraries
install_name_tool -id @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_core.2.3.1.dylib
install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_imgproc.2.3.1.dylib
install_name_tool -id @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_highgui.2.3.1.dylib
И эти строки говорят библиотекам искать друг друга в папке Frameworks .
#Fix references in libraries
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_imgproc.2.3.1.dylib
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_highgui.2.3.1.dylib
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_highgui.2.3.1.dylib
Все это произошло на этапе сборки Run Script моей цели в моем проекте Xcode.