本文主要是介绍Mac开发-dylib的加载问题 Library not loaded,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
查看动态库依赖
如何查看文件的dylib
依赖,使用otool
命令
otool -l xxx.dylib
同样可以使用该命令查看app的动态库依赖
右键应用
,显示包内容
- 进入
Content/MacOS/xxxx
- 执行
otool -l xxxx
命令
然后类似如下输出:
Load command 12cmd LC_LOAD_DYLIBcmdsize 56name /usr/lib/libsqlite3.dylib (offset 24)time stamp 2 Thu Jan 1 08:00:02 1970current version 274.1.0
compatibility version 9.0.0
Load command 13cmd LC_LOAD_DYLIBcmdsize 64name /usr/local/lib/libVlcFilePlayer.dylib (offset 24)time stamp 2 Thu Jan 1 08:00:02 1970current version 1.0.0
compatibility version 1.0.0
mac应用
在开发mac应用时,需要导入自己的dylib文件,即动态库
就算将dylib导入到工程中,放在工程路径下,仍然会出现
dyld: Library not loaded: /usr/local/lib/xxxx.dylibReferenced from: /Users/gensee/Library/Developer/Xcode/DerivedData/Training-alpmebybwastnvgsktohhvrnlgin/Build/Products/Debug/Training.app/Contents/MacOS/TrainingReason: image not found
这里的xxxx.dylib已经导入工程中,但xcode还是会在/usr/local/lib/
下寻找,故需要拷贝其到/usr/local/lib/
目录下即可。
还有一种方案即使用install_name_tool
来重新定向
-change
当通过 otool -l
命令查看类型为 LC_LOAD_DYLIB
时可以使用-change进行改变
install_name_tool -change [oldpath] [newpath] [target]
install_name_tool -change "/usr/local/lib/xxxx.dylib" "@executable_path/../Frameworks/xxxx.dylib" "xxx.app/Contents/MacOS/${target}"
这样即可处理路径寻找问题。同时如果某个库中相互依赖,也可以使用该命令指定
install_name_tool -change "/usr/local/lib/xxx1.dylib" "@executable_path/xxx1.dylib" "${target}.app/Contents/MacOS/xxx2.dylib"
这里xxx2.dylib
需要依赖xxx1.dylib
-id
当通过 otool -l
命令查看类型为 LC_ID_DYLIB
时可以使用-id
进行改变
对于 install_name_tool -id [path] [target]
iOS应用
对于iOS应用,导入自己的动态库,需要设置Embedded Binaries
和 Mac
的问题完全不一样
在这里添加上,然后设置好Framework
的Search Path
就好
这篇关于Mac开发-dylib的加载问题 Library not loaded的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!