环境
- macOS Big Sur 11.5.1 处理器:Intel
- Qt5.15.2
- Git
clone
qwt
下载qwt6.2.0 zip包 https://sourceforge.net/projects/qwt/files/
将文件重命名为qwt后放到 ~/ws
serialplot
克隆serialplot
cd ~/ws
git clone https://github.com/hyOzd/serialplot.git
编译
qwt
打开qwt的qwt.pro文件,切换至Release,编译
serialplot
打开serialplot.pro文件
#添加qwt库
LIBS += -F$$PWD/../build-qwt-Desktop_Qt_5_15_2_clang_64bit-Release/lib -framework qwt
#添加qwt库目录
INCLUDEPATH += $$PWD/../qwt/src
在QtCreator 项目 -> Build -> Build Environment 添加DYLD_FRAMEWORK_PATH /Users/qj/ws/build-serialplot-Desktop_Qt_5_15_2_clang_64bit-Release
然后编译->运行
打包
在build目录中执行
macdeployqt ./serialplot.app
// 注意:如果提示找不到此命令的解决办法:
// 在你的qt安装目录找到这个命令的位置,把其路径添加到“bash环境”里面即可。
command not found: macdeployqt //提示找不到此命令
cd ~ //切换到用户家目录
vim .bash_profile //用vim编辑配置文件bash_profile 注:按键盘的“i”进入vim插入模式
//在bash_profile中新增以下这一行的内容,下面这一行的意思是在此目录查找macdeployqt这个命令
export PATH=${PATH}:/Users/robert/Qt5.12.5/5.12.5/clang_64/bin
:wq //退出并保存
source .bash_profile //执行这个命令使刚才的配置立即生效
// 执行完macdeployqt命令后出现错误
ERROR: no file at "/Library/Frameworks/qwt.framework/Versions/6/qwt.framework/Versions/6/qwt"
// qwt为第三方库,macdeployqt无法直接将其打包到serialplot.app中,需要手动复制
cp -r ~/ws/build-qwt-Desktop_Qt_5_15_2_clang_64bit-Release/lib/qwt.framework ./serialplot.app/Contents/Frameworks/qwt.framework
右键serialplot.app包选择查看包内容,即可打开一个目录,展开目录可以看到macdeployqt给这个bundle增加了有关qt的依赖库文件。如下图所示:
// 这时我们双击serialplot.app运行,出现错误
Dyld Error Message:
dyld: Using shared cache: B936FA17-1090-3677-8A1A-0FB7DE3CEC6C
Library not loaded: qwt.framework/Versions/6/qwt
// 从log发现是qwt loaded失败
// 使用otool查看serialplot.app使用的动态库,如下图所示:
otool -L serialplot.app/Contents/MacOS/serialplot
// 发现qwt的路径与其他qt库有差异,使用install_name_tool命令修改qwt库路径
install_name_tool -change "qwt.framework/Versions/6/qwt" "@rpath/qwt.framework/Versions/6/qwt" serialplot.app/Contents/MacOS/serialplot
// 然后再使用otool查看app使用的库路径
otool -L serialplot.app/Contents/MacOS/serialplot
// 查看qwt使用的库
otool -L serialplot.app/Contents/Frameworks/qwt.framework/Versions/6/qwt
// 对比serialplot.app/Contents/Frameworks中qt库与qwt所使用的库,将没有的库手动cp到Framework中即可
cp -r ~/Qt/5.15.2/clang_64/lib/QtOpenGL.framework ./serialplot.app/Contents/Frameworks/QtOpenGL.framework
cp -r ~/Qt/5.15.2/clang_64/lib/QtConcurrent.framework ./serialplot.app/Contents/Frameworks/QtConcurrent.framework
好了,最艰难地时刻过去了,现在双击serialplot.app即可正常运行!
发布
制作dmg
// 在serialplot build目录中执行
macdeployqt ./serialplot.app -dmg
// 忽略告警,应为我们之前执行过macdeployqt,会提示文件已经存在,这一步仅用来生成dmg的
大功告成!
|