gpt4 book ai didi

objective-c - XCode dylib 在/usr/lib 中查找

转载 作者:行者123 更新时间:2023-12-01 11:04:39 27 4
gpt4 key购买 nike

我在 XCode 中创建了一个动态库。我将安装目录设置为@rpath。然后我创建了一个测试项目,我在其中使用了这个 dylib。当我运行它时,我得到 dyld error:library not loaded....Reason: no image found.

但是......如果我把那个 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

我通过之前运行 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)

接下来的几行告诉库在 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

这一切都来 self 的 Xcode 项目中目标的运行脚本构建阶段。

关于objective-c - XCode dylib 在/usr/lib 中查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com