• 3990阅读
  • 8回复

[提问]MacOSX下,一个app bundle如何包含多个执行档并能互相调用? [复制链接]

上一主题 下一主题
离线roywillow
 

只看楼主 倒序阅读 楼主  发表于: 2013-05-16
有这么一个项目,其中包含一个主程序,一个updater,都是可执行档。主程序通过QProcess调用updater来搜索新版本。
Windows下很好办,但是在mac下,两个程序分别生成了app bundle。我对两个bundle分别调用了macdeployqt,然后把updater中的执行档放到主程序的执行档相同位置。在这里我可以分别双击它们独立运行,但是在主程序中似乎无法调用这个updater:
  1. QApplication a(argc, argv);
  2. #ifdef Q_OS_MACX
  3.     QDir::setCurrent(a.applicationDirPath());
  4. #endif
  5. QStringList args;
  6. bool m = QProcess::startDetached("updater", args, QDir::currentPath());

m始终返回的是false。是因为工作目录不对,没找到updater呢,还是本来就不能这么调用一个 从bundle中提取出来的执行档?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线uidab

只看该作者 1楼 发表于: 2013-05-16
回 楼主(roywillow) 的帖子
查看一下依赖库的情况。这样做是可行的。以前我就是这样成功做的。

有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线roywillow

只看该作者 2楼 发表于: 2013-05-16
回 1楼(uidab) 的帖子
敢问是怎么做的?我想再对照一下看看是不是疏忽了哪里
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线uidab

只看该作者 3楼 发表于: 2013-05-16
otool -L yourapp.app/Contents/MacOS/yourapp

查看有没有dylib和你设想的不一样。
有的话就改成
install_name_tool   -change    /usr/local/lib/lib01.dylib      @loader_path/../dylib/lib01.dylib       "yourapp.app/Contents/MacOS/yourapp"

注: @loader_path也可以写@executable_path.   没有苹果电脑,拼写全靠记忆了。

另外,你有没有自己外加的dylib,看看他们的的依赖库。(动态库也有依赖库,这个必须也要改,当初我改的时候就是在这里没注意)
如果输出目录有 /usr/local/lib........,那就都要改。

有个别的核心库不用改,每台苹果电脑都安装了。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线uidab

只看该作者 4楼 发表于: 2013-05-16
回 2楼(roywillow) 的帖子
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线uidab

只看该作者 5楼 发表于: 2013-05-16
回 2楼(roywillow) 的帖子
bool m = QProcess::startDetached("updater", args, QDir::currentPath());

另外,我没加第三个路径参数。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线roywillow

只看该作者 6楼 发表于: 2013-05-17
回 5楼(uidab) 的帖子
先谢过啦,回去我看看
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 7楼 发表于: 2013-05-25
回 5楼(uidab) 的帖子
已经解决了
mac下像我这种调用,要用绝对路径;虽然我已经把工作目录设置到了那个updater所在的位置,但是直接那么执行似乎找不到这货……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线uidab

只看该作者 8楼 发表于: 2013-05-26
回 7楼(roywillow) 的帖子
不会吧,我原来就是这样么做的。

不过目前你解决了就好,以后再慢慢找相对路径的问题。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
快速回复
限100 字节
 
上一个 下一个