当前位置: 首页 > news >正文

廊坊网站制作服务/信息流优化师培训机构

廊坊网站制作服务,信息流优化师培训机构,柳市做公司网站,axure做网站原型图作者:virushuo 发表于 2009-07-01 10:07 最后更新于 2009-07-01 23:07版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。http://blog.devep.net/virushuo/2009/07/01/xcodecocoadylib.html update:留言中…

作者:virushuo 发表于 2009-07-01 10:07 最后更新于 2009-07-01 23:07
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://blog.devep.net/virushuo/2009/07/01/xcodecocoadylib.html


 

update:留言中jjgod的方法更为正宗和简单。请参考。不过如果dylib之间有依赖关系,你又不想重新编译。那大概还是要用我这个办法的。

所谓dylib,就是bsd风格的动态库。基本可以认为等价于windows的dll和linux的so。mac基于bsd,所以也使用的是dylib。

如果你需要引用一个第三方的dylib,在xcode下编译出cocoa程序,在本机上运行是不会出问题的。但是发布出来,给其他用户用,就可能出问题。因为用户不一定有这个库。

这个问题给我造成了相当的困扰,我到现在也没找到正规的方法。但是我确实解决了这个问题,虽然方法不一定正宗。不管怎么说,写下来,如果暂时没有更好的办法,那么先这样做。如果谁有更好的办法,也请一定不吝留言或邮件给我

我的办法是这样的:


1 otool -L yourapp.app/Contents/MacOS/yourapp

这一步的意思是对你编译出的app使用otool命令,以便获得依赖哪些dylib的信息。注意这个路径。cocoa的app在命令行下表现为目录。所有相关的东西都在里面。
结果如下所示:
yourapp.app/Contents/MacOS/yourapp:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
/usr/local/lib/lib01.dylib (compatibility version 0.0.0, current version 0.1.0)
/usr/local/lib/lib02.dylib (compatibility version 0.0.0, current version 0.1.0)
/usr/local/lib/lib03.dylib (compatibility version 0.0.0, current version 0.1.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.12.0)

注意我标红的地方。假如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/
cp /usr/local/lib/lib02.dylib yourapp.app/Contents/dylib/
cp /usr/local/lib/lib03.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:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
@loader_path/../dylib/lib01.dylib (compatibility version 0.0.0, current version 0.1.0)
/usr/local/lib/lib02.dylib (compatibility version 0.0.0, current version 0.1.0)
/usr/local/lib/lib03.dylib (compatibility version 0.0.0, current version 0.1.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.12.0)

注意标红的位置。已经变化了。@loader_path 指的是应用程序运行的位置,也就是yourapp.app/Contents/MacOS/yourapp,所以要用一个..,以便定位到第2步创建的dylib目录。
重复这个命令,修改lib02,lib03


4 otool -L yourapp.app/Contents/dylib/*.dylib

继续用otool 来检查dylib下面使用的第三方库是否还有其他依赖,install_name是否正确,重复1,2,3的步骤,把所需要的dylib复制过来,修改install_name。

如果都改对了,那么这个app就附带上了dylib,可以在其他机器上正确运行了,不用非要寻找/usr/local/lib下面的库了。


刚才我们修改的结果是一个build的结果。当然,每次build都这么折腾一下很麻烦。所以继续这样做:

1 前面的步骤得到了一个完整的dylib目录。把这个dylib复制一份备用。比如放在你的xcode项目下面。

2 编写一个脚本:

mkdir "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/dylib"
cp -f /your/path/to/xcode_project_name/dylib/*.dylib "$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"
(用这个格式重复前面对app使用过的dylib)

3 在xcode中,展开targets节点,右键点工程名称,在菜单中选Add->New Build Phasa->New Run Script Build Phasa,在打开的对话框里面,把刚才的脚本贴进去。如图所示。

这个脚本会在build之后自动运行。不过我这里有个奇怪的问题,如果Shell里面写了/bin/sh,会报告找不到这个文件(实际上存在),而让shell为空,反而可以正确的运行shell命令。

经过这些处理,每次编译出来的app就可以拿到其他机器上运行了。可真够麻烦的...

转载于:https://www.cnblogs.com/KiloNet/archive/2010/08/20/1804399.html

http://www.lbrq.cn/news/1314307.html

相关文章:

  • 如何在百度做网站推广/廊坊seo
  • 好商网的网站可以做中英文切换吗/百度经验首页
  • 一个人可以做网站吗/网络营销案例
  • 国外网站代理/网站开发需要的技术
  • 多用户购物商城源码/石家庄seo关键词
  • 做招聘网站怎么赚钱/关键词搜索查询
  • 成都系统网站建设/百度新闻发布平台
  • 叮当快药网站谁做的/品牌推广
  • 新网站怎么做权重/中国十大互联网公司排名
  • 建设网站的技术难点/危机舆情公关公司
  • 派出所web网站建设策划案/微信引流推广
  • 网站被入侵后需做的检测 1/无锡网站优化公司
  • 家庭路由器建个人网站/怎么优化网站
  • wordpress怎么改后台/京东关键词优化技巧
  • 做动画 的 网站有哪些内容/百度怎么联系客服
  • 网站备案手机号/深圳电子网络推广查询
  • 新网站怎么做排名/seo查询系统
  • 一个做网站编程的条件/爱站工具下载
  • 郴州网站设计公司/win10优化大师好用吗
  • 网络公司网站模版/奉化网站关键词优化费用
  • 大型建站网站/百度免费推广平台
  • 全球云邮登陆网站/网页设计与制作作业成品
  • 线上网站制作/培训平台有哪些
  • 贵州住房和城乡建设委员会网站/山东建站
  • 哪些网站是做采购的/竞价关键词排名软件
  • 根据网站日志做seo/做推广网络
  • 电脑有固定IP 做网站/关键词推广营销
  • 江苏专业网站建设/建站推广
  • 本地最好的网站开发建设公司/nba排名最新赛程
  • 网络管理专业/魔方优化大师官网
  • SQL学习记录01
  • Linux-【单体架构/分布式架构】
  • 三十二、【核心功能改造】数据驱动:重构仪表盘与关键指标可视化
  • 微信小程序入门实例_____从零开始 开发一个每天记账的微信小程序
  • JAVA学习笔记 使用notepad++开发JAVA-003
  • 全面安装指南:在Linux、Windows和macOS上部署Apache Cassandra