赞
踩
在安装Qt的时候,在大家安装Qt的文件下,可以找到 macdeployqt 脚本
在命令行下 cd 进入这个目录。然后运行
./macdeployqt /Users/XXX/QtProject/build-QDemo-Desktop_Qt_5_10_0_clang_64bit-Debug/QDemo.app -dmg
QML 程序的打包
./macdeployqt /Users/XXX/Desktop/XXX/XXX.app -qmldir=/Users/XXX/Qt5.12.0/5.12.0/clang_64/qml -dmg
注意前面是 ./
,然后就会在你编译的Qt程序目录下面生成一个QDemo.dmg 发给朋友安装即可使用。
当你的应用程序使用了第三方的动态库,或自己开发的动态库的时候,使用macdeployqt则会报错:
ERROR: no file at "/usr/lib/libXXXX.1.dylib"
用otool -L test.app/Contents/MacOS/test 可以看到输出中包含如下这一行。所依赖的第三方库
libXXXX.1.dylib (compatibility version 1.0.0, current version 1.0.1)
这一行表示你的应用程序找这个动态库是相对路径的,即要求你的这个动态库在/usr/lib目录下或/usr/local/lib目录下。你双击编译出的用用程序提示无法打开,点击报告会显示为找不到库。其实是在/usr/lib目录下或/usr/local/lib目录下 找不到这个库。你手工放置库文件到这个目录即可双击运行。注意:你没有权限把库放到/usr/lib下,因此你放到/usr/local/lib即可。
注意在你动态库的xxx.pro文件中加入如下的配置。否则,双击应用程序的时候会到/usr/lib找,而不是在/usr/local/lib找。
unix {
target.path = /usr/local/lib
INSTALLS += target
}
为了发布出去的应用程序不再在/usr/local/lib目录下找对应的动态库。而是在bundle包(目录)中查找。从而用户复制你的bundle到“应用程序”目录即可直接运行。因此你需要修改应用程序记录动态库的路径。修改方法如下:
install_name_tool -change "libXXXX.1.dylib" "@rpath/xxxx/libXXXX.1.dylib" test.app/Contents/MacOS/test
命令表示,把bundle包里面的应用程序untitled储存的此库的路径从"libXXXX.1.dylib”改为"@rpath/xxxx/libXXXX.1.dylib”。
执行完此命令后,找到untitled这个编译好的程序右键“打开包内容/Show Package Contents”,然后跳转到bundle的包内部目录里面,切换到“Contents”目录下的Frameworks目录中,然后创建一个目录“xxxx”(自己起的名字)然后把你制作的动态库或第三方的动态库放到这个目录。保证库的名字和"@rpath/xxxx/libXXXX.1.dylib”写的库的名字对应上。
以上就都做好了,现在用otool工具检测一下应用程序untitled包含库的路径:
otool -L test.app/Contents/MacOS/test
就会变成以@rpath开头的相对路径了。这次你双击“untitled”程序,程序就不会报错说找不到库了。
然后执行以下命令打包为dmg安装包:
macdeployqt ./build-test-Desktop_Qt_5_12_3_clang_64bit-Release/test.app -dmg
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。