一,为什么QT要打包和部署?
因为我们要把写好的程序发给用户来用,我们写好的源码也不是随便给别人的。
二,QT如何打包和部署?
1.我们把工厂切换到release模式,然后编译。
release模式:基本没有调试信息。
debug模式:有很多调试信息。
2.找到release模式构建的文件夹。
3.改一下图标。先把图标加到工程所在文件夹。然后在pro文件里面添加
RC_ICONS=serial_iocn.ico
注意:图标的格式必须为.ico这个格式的,其他格式不行。
4.封包操作,需要用到QT的控制台,接下来,我们需要电脑桌面上创建一个新的文件夹,注意千万不要有中文路径。然后把exe文件拷贝到我们新创建的文件夹里面,如下:
在QT控制台里面。我们使用命令进到我们新创建的文件夹所在的路径,命令如下。
最后一步,我们使用windeployqt工具把库加到我们新创建的这个文件夹里面。如下:
格式:windeployqt exe文件的名称
三,QT5.14封装成可执行程序,运行qt的终端:
进入deploy.bat所在的路径,
然后把deploy.bat拖进去回车就可以
新建deploy.bat
rmdir /S /Q Deploy
mkdir Deploy
xcopy /E Release64\Windows\* Deploy\
windeployqt --qmldir qml Deploy\yourTest.exe
四,QT5.8生成可执行程序
1,在Qt Creator下用release跑一遍程序,生成相应的EXE文件
2,在Qt Creator下编译好的release下的 youProgramName.exe 拷贝到一个文件夹下面;
3,打开Qt命令行,也就是Qt5.8 64-bit for desktop(MSVC 2015),然后进入你拷贝EXE文件的文件夹下; 如:cd /d D:\drinkWater,接着运行 windeployqt youProgramName.exe,然后文件夹下就会出现所有依赖。
五,zynq 使用2022.2移植QT的修改
build.sh
#!/bin/sh
source /home/zynq/petalinux/settings.sh
SDK_PATH=/tools/Xilinx/Vitis/2022.2
if [ ! -d $SDK_PATH ]; then
echo "no dir ${SDK_PATH}"
exit 1
fi
source ${SDK_PATH}/settings64.sh
export ZYNQ_QT_INSTALL=/opt/alinx/zynq_qt5.7.1
#export PKG_CONFIG_LIBDIR=${SDK_PATH}/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/lib
export PKG_CONFIG_LIBDIR=${SDK_PATH}/gnu/aarch32/lin/gcc-arm-linux-gnueabi/cortexa9t2hf-neon-xilinx-linux-gnueabi/lib
export CROSS_COMPILE=arm-linux-gnueabihf-
if [ ! -d $PKG_CONFIG_LIBDIR ]; then
echo "no ${PKG_CONFIG_LIBDIR}"
exit 1
fi
Cur_Dir=$(pwd)
QT_SORCE=qt-everywhere-opensource-src-5.7.1
echo $Cur_Dir
export ZYNQ_QT_BUILD=$Cur_Dir
export PATH=$ZYNQ_QT_INSTALL/bin:$PATH
cd $QT_SORCE
./configure -xplatform arm-linux-gnueabihf-g++ \
-opensource \
-confirm-license \
-skip qtquickcontrols \
-skip qtwebchannel \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtdeclarative \
-skip qtimageformats \
-skip qtmacextras \
-skip qtserialport \
-skip qtx11extras \
-skip qtxmlpatterns \
-skip qtconnectivity \
-skip qtdoc \
-skip qtgraphicaleffects \
-skip qtlocation \
-skip qtmultimedia \
-skip qtsensors \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebchannel \
-skip qtwebengine \
-skip qtwebsockets \
-skip qtwinextras \
-verbose \
-no-gif \
-no-libjpeg \
-no-mtdev \
-no-sql-db2 \
-no-sql-ibase \
-no-sql-mysql \
-no-xcb \
-qt-freetype \
-fontconfig \
-no-harfbuzz \
-no-xinput2 \
-no-xcb-xlib \
-no-pulseaudio \
-no-alsa \
-no-cups \
-no-iconv \
-no-icu \
-no-eglfs \
-no-openssl \
-no-dbus \
-prefix $ZYNQ_QT_INSTALL
make -j4
sudo make install
sudo cp $Cur_Dir/qt_env_set.sh $ZYNQ_QT_INSTALL/qt_env_set.sh
make_image.sh
#!/bin/sh
export ZYNQ_QT_INSTALL=/opt/alinx/zynq_qt5.7.1
#export PKG_CONFIG_LIBDIR=/opt/Xilinx/SDK/2017.4/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/lib
export PKG_CONFIG_LIBDIR=/tools/Xilinx/Vitis/2022.2/gnu/aarch32/lin/gcc-arm-linux-gnueabi/cortexa9t2hf-neon-xilinx-linux-gnueabi/lib
if [ ! -d $ZYNQ_QT_INSTALL ]; then
echo "no ${ZYNQ_QT_INSTALL}"
exit 1
fi
if [ ! -d $PKG_CONFIG_LIBDIR ]; then
echo "no ${PKG_CONFIG_LIBDIR}"
exit 1
fi
Cur_Dir=$(pwd)
LIBS_NAME=zynq_qt_lib
mkdir $LIBS_NAME
sudo cp $ZYNQ_QT_INSTALL/lib/*.so* $Cur_Dir/$LIBS_NAME
sudo cp -R $ZYNQ_QT_INSTALL/plugins $Cur_Dir/$LIBS_NAME
sudo cp $PKG_CONFIG_LIBDIR/libstdc++.so* $Cur_Dir/$LIBS_NAME
sudo cp $PKG_CONFIG_LIBDIR/* $Cur_Dir/$LIBS_NAME
cp -R fonts $Cur_Dir/$LIBS_NAME
cp $Cur_Dir/qt_env_set.sh $Cur_Dir/$LIBS_NAME
sudo chmod 777 $Cur_Dir/$LIBS_NAME -R
sudo dd if=/dev/zero of=qt_lib.img bs=1M count=400
sudo mkfs.ext4 -F qt_lib.img
sudo chmod go+w qt_lib.img
sudo mount qt_lib.img -o loop /mnt
sudo cp -rf $Cur_Dir/$LIBS_NAME/* /mnt
sudo chmod go-w qt_lib.img
sudo umount /mnt
源自于编译启动文件时候产生的
把下面这些复制过去,因为缺少这些库
修改前
复制进去以后 sudo cp $PKG_CONFIG_LIBDIR/* $Cur_Dir/$LIBS_NAME