dfs*_*fsf 2 macos xcode frameworks objective-c dylib
我在XCode中创建了一个dylib.我将installtion目录设置为@rpath.然后我创建了一个测试项目,我正在使用这个dylib.当我运行它时,我得到dyld错误:库没有加载....原因:没有找到图像.
但是....如果我把那个dylib放在/ usr/lib文件夹中,那么它就像魅力一样.
所以我的问题是,有没有一种方法在编译这个dylib时,我可以指定一些设置,这样它就不会查看/ usr/lib并只查看它所在的位置(如果这有意义)?谢谢!
编辑:我在写完这个答案后重新阅读了你的问题.由于您只是创建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
Run Code Online (Sandbox Code Playgroud)
我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)
Run Code Online (Sandbox Code Playgroud)
这些下一行告诉库在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
Run Code Online (Sandbox Code Playgroud)
这些行告诉库在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 Code Online (Sandbox Code Playgroud)
这一切都来自我的目标在我的Xcode项目中的Run Script构建阶段.
| 归档时间: |
|
| 查看次数: |
2193 次 |
| 最近记录: |