我在XCode中創建了一個dylib。我將installtion目錄設置爲@rpath。然後我創建了一個測試項目,在這個項目中我使用了這個dylib。當我運行它,我得到dyld錯誤:庫未加載....原因:沒有找到圖像。XCode dylib在/ usr/lib中尋找
但是,如果我把那個dylib放在/ usr/lib文件夾中,那麼它就像一個魅力。
所以我的問題是,有沒有辦法編譯這個dylib時,我可以指定一些設置,所以它不看在/ usr/lib中,只是看它的位置(如果這是有道理的)?謝謝!
我在XCode中創建了一個dylib。我將installtion目錄設置爲@rpath。然後我創建了一個測試項目,在這個項目中我使用了這個dylib。當我運行它,我得到dyld錯誤:庫未加載....原因:沒有找到圖像。XCode dylib在/ usr/lib中尋找
但是,如果我把那個dylib放在/ usr/lib文件夾中,那麼它就像一個魅力。
所以我的問題是,有沒有辦法編譯這個dylib時,我可以指定一些設置,所以它不看在/ usr/lib中,只是看它的位置(如果這是有道理的)?謝謝!
編輯:我在回答完這個問題後重新閱讀你的問題。由於您只創建dylib,而不是可執行文件,因此您只需要使用install_name_tool -id
命令。我不相信你可以告訴它自己找到它自己的位置。我認爲你必須給它一條道路。在這個例子中,它看起來在應用程序包的框架路徑,這是一個相當合理的地方看。
您必須更改應用程序查找文件的路徑以及庫期望找到自己的路徑。以下是我使用三個OpenCV庫的示例。
這些第一行告訴應用程序在應用程序包的框架文件夾中查找庫。 ($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
我通過以前運行otool -L
拿到了第一個參數(lib/libopencv_core.2.3.dylib
)。
$ 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)
這些下一行告訴庫,以尋找自己在框架文件夾。
#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
而這些線條訴說着圖書館在框架文件夾去找對方。
#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
這一切都來自我在我的Xcode項目中的目標的運行腳本構建階段。
工作很好!請注意,您還需要「複製文件」階段將.dylib文件複製到Frameworks目錄。 – Emiller