最近在升级App时,本地测试没有问题,在其他机器上测试时,出现了,"libcrypto.1.0.0.dylib" Image Not Found, "Library missing"的问题。
XCode出现“Image Not Found”的错误,可能有以下几个原因:
1. libcrpto.1.0.0.dylib,文件没有copy到程序包里面。需要检查程序包里是否有改文件
2. libcrpto.1.0.0.dylib , 文件的调用路径不正确。
3. libcrpto.1.0.0.dylib , 的install name是绝对路径,而不是@rpath, @executable_path等相对路径。
经过排查,只可能是原因3, 需要用到 install_name_tool 来修改libcrypto.1.0.0.dylib的install_name
1. 什么是install name?
每一个dylib都有一个install_name , 可以用 otool -L 来查看dylib的install name, 如下图红框部分所示,整个路径就是libcrypto.1.0.0.dylib的install name
因为此处是绝对路径,所以程序在另一台电脑运行时,就会出现找不到的错误
2. install_name_tool命令修改install name
install_name_tool -id 命令用于修改动态库的安装名称(install name)。
该命令的基本语法如下:
install_name_tool -id new_path path_of_dylib
其中,new_path
是新的安装名称,path_of_dylib
是要修改的dylib文件(绝对路径,相对路径均可以)
修改libcrypto.1.0.0.dylib的install name命令如下:
install_name_tool -id @rpath/libcrypto.1.0.0.dylib ./libcrypto.1.0.0.dylib
如果出现如下错误,
error: install_name_tool: can't open input file: ./libcrypto.1.0.0.dylib for writing (Permission denied)
error: install_name_tool: can't lseek to offset: 0 in file: ./libcrypto.1.0.0.dylib for writing (Bad file descriptor)
error: install_name_tool: can't write new headers in file: ./libcrypto.1.0.0.dylib (Bad file descriptor)
error: install_name_tool: can't close written on input file: ./libcrypto.1.0.0.dylib (Bad file descriptor)
就使用如下命令:
sudo install_name_tool -id @rpath/libcrypto.1.0.0.dylib ./libcrypto.1.0.0.dylib
3. @rpath , @executable_path的区别
后续再补充
标签:Code,name,missing,0.0,libcrypto.1,install,dylib,OS,tool From: https://blog.csdn.net/pisceshsu/article/details/145289579