
| 所谓dylib,就是bsd风格的动态库。基本可以认为等价于windows的dll和linux的so。mac基于bsd,所以也使用的是 dylib。 如果你需要引用一个第三方的dylib,在xcode下编译出cocoa程序,在本机上运行是不会出问题的。但是发布出来,给其他用户用,就可能出 问题。因为用户不一定有这个库。解决方法是:
这一步的意思是对你编译出的app使用otool命令,以便获得依赖哪些dylib的信息。注意这个路径。cocoa的app在命令行下表现为目 录。所有相关的东西都在里面。 注意我标红的地方。假如lib01,lib02,lib03是本程序引用的第三方库,那么在这个程序里面,他们的引用地址是位于/usr /local/lib上的。这是开发机上的安装情况。而使用这个程序的客户机未必安装这些东西,所以程序就要出错。 显然,我们需要做2件事。a 把这些库附带在app上 b 把他们的引用地址修改到正确的位置。 2 mkdir yourapp.app/Contents/dylib 在编译出来的app中,创建dylib目录 然后把所有需要的库复制过去 cp /usr/local/lib/lib01.dylib yourapp.app/Contents/dylib/ 3 install_name_tool -change /usr/local/lib/lib01.dylib @loader_path/../dylib/lib01.dylib "yourapp.app/Contents/MacOS/yourapp" install_name_tool 是苹果提供的用来修改dylib安装名称的命令。这个命令执行之后,再用otool -L 就可以看到变化了 yourapp.app/Contents/MacOS/yourapp: 注意标红的位置。已经变化了。@loader_path 指的是应用程序运行的位置,也就是yourapp.app/Contents/MacOS/yourapp,所以要用一个..,以便定位到第2步创建的 dylib目录。
继续用otool 来检查dylib下面使用的第三方库是否还有其他依赖,install_name是否正确,重复1,2,3的步骤,把所需要的dylib复制过来,修改 install_name。 如果都改对了,那么这个app就附带上了dylib,可以在其他机器上正确运行了,不用非要寻找/usr/local/lib下面的库了。
1 前面的步骤得到了一个完整的dylib目录。把这个dylib复制一份备用。比如放在你的xcode项目下面。 2 编写一个脚本: mkdir "$TARGET_BUILD_DIR/$PRODUCT_name.app/Contents/dylib" install_name_tool -change /usr/local/lib/lib01.dylib @loader_path/../dylib/lib01.dylib "$TARGET_BUILD_DIR/$PRODUCT_name.app/Contents/MacOS/$PRODUCT_name" 3 在xcode中,展开targets节点,右键点工程名称,在菜单中选Add->New Build Phasa->New Run Script Build Phasa,在打开的对话框里面,把刚才的脚本贴进去。如图所示。 这个脚本会在build之后自动运行。不过我这里有个奇怪的问题,如果Shell里面写了/bin/sh,会报告找不到这个文件(实际上存在),而 让shell为空,反而可以正确的运行shell命令。 经过这些处理,每次编译出来的app就可以拿到其他机器上运行了。可真够麻烦的... |
以上是内存溢出为你收集整理的XCode、Cocoa开发中使用第三方dylib的方法全部内容,希望文章能够帮你解决XCode、Cocoa开发中使用第三方dylib的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)