XCode dylib ищет в / usr / lib - PullRequest
       16

XCode dylib ищет в / usr / lib

2 голосов
/ 19 августа 2011

Я создал dylib в XCode.Я установил каталог установки @rpath.Затем я создал тестовый проект, в котором я использую этот dylib.Когда я запускаю его, я получаю ошибку dyld: библиотека не загружена .... Причина: изображение не найдено.

НО .... если я помещу этот dylib в папку / usr / lib, он будет работать следующим образомочарование.

Так что мой вопрос: есть ли способ при компиляции этого dylib, я могу указать некоторые настройки, чтобы он не смотрел в / usr / lib и просто смотрел, где он находится (если это делаетсмысл)?Спасибо!

1 Ответ

5 голосов
/ 24 августа 2011

Редактировать: Я перечитал ваш вопрос после написания этого ответа. Поскольку вы создаете только 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.

...