写做是一种习惯,稍微松懈,也许失去的就不少。过了一个年,竟然不少天都没有更新,幸福的代价吧:)程序员
标题的问题其实之前碰到过,不过当时在iOS,因此随手处理了没有重视。
而此次是在macOS,所使用的库,自己已经用brew安装过,因此本机调试没有发现这个问题。
等到拷贝到用户的机器上,忽然发现程序没法启动,查看log才发现库没有找到。而实际上当时,我已经很确认的将dylib库文件打包到了app中。bash
随后发现macOS的dylib采起了比较特殊的机制,每一个文件都内置有完整的路径名,若是不把dylib文件放置到这个路径上去,应用调用dylib的时候就会报错找不到库文件。
官方推荐的解决的方法是将库文件及头文件打包编译为Frameworks,随后引入到项目中。不过对于不少gnu的跨平台程序员,确定不但愿单独为macOS来写一个Xcode工程。
因此我建议仍是使用内置的工具来修改这个执行路径,步骤以下:app
otool -L libabc.0.dylib
命令来查看这个库内置的路径名,没有意外的话,应当是/usr/local/lib/libabc.0.dylib
。install_name_tool -id @executable_path/../Frameworks/libabc.0.dylib libabc.0.dylib
注意修改以后的路径@executable_path/../Frameworks/libabc.0.dylib
,这个是app中的Frameworks目录,许多引用的框架和sdk内置的dylib文件,编译时候会放置到这里。框架
libabc.0.dylib
,这是保证app编译连接的时候可以正常经过。我记得Xcode7仍是什么版本中,在这里银如意了库文件,库文件就会被自动的加入到Frameworks目录,但也许是否是sdk内置的库文件,只在这里引用解决了连接问题,但并不能自动把dylib库文件打包到app中。作完了以上这些,编译出来的app应用就能正确的调用本身包中的库文件了。工具