应用程序打包发布
windows下发布
这个比较简单,拷贝可执行程序在新的文件夹中:例如MyApp
进入之后执行如下:
windeployqt xxx.exe
然后就会生成打包文件(主要是qt依赖)
如果是需要一些自己编写的库文件,这时候就要手动拷贝到xxx.exe同一级目录下即ok
linux下发布
这个会复杂一点,这里不自带deployqt,所以需要安装
linuxdeployqt
然后重新命名为linuxdeployqt,随便你自己改。
给它加权限,注意是在同一级目录中
sudo chmod +x linuxdeployqt
然后复制到系统的bin目录下
sudo mv linuxdeployqt /usr/local/bin
运行
linuxdeployqt --version
会出现就ok
打包程序
当QT编译成功后,会出现自己的可执行文件
同样将可执行文件放入新的文件夹中例如:myapp
进入执行
linuxdeployqt app -appimage
一般就ok可以用了
ldd的链接问题
如果是自己写的库,可能会出现找不到自己的库的问题
解决方案
将库找出来放入文件夹xxx
执行
export LD_LIBRARY_PATH=/home/path/xxx:$LD_LIBRARY_PATH
然后执行
linuxdeployqt app -appimage
体会
此类ldd问题,其实有很多解决方案
比如写入.bashrc
文件export LD_LIBRARY_PATH=/home/path/xxx:$LD_LIBRARY_PATH
,然后source ~/.bashrc
在比如下面也ok
cd /etc/ld.so.conf.d
sudo touch mylib,conf
sudo gedit mylib,conf
写入自定义库的路径
sudo ldconfig
-------------------------------------------------------更新一些小脚本------------------------------------------------------------------
1.自动拷贝自定义的库文件到制定的文件夹
使用方法:在build文件夹下(一般都是这个),执行下面脚本文件
#!/bin/bash
# 定义源目录和目标目录
SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
DEST_DIR="lib_sub"
# 检查目标目录是否存在,如果不存在则创建
if [ ! -d "$DEST_DIR" ]; then
mkdir "$DEST_DIR"
fi
cd $DEST_DIR
rm -r *
cd ..
# 函数用于复制文件和链接,保持链接结构
copy_files_and_links() {
local pattern=$1
local source_file
local dest_file
local link_target
# 复制文件
find "$SOURCE_DIR" -type f -name "$pattern" -exec cp -P {} "$DEST_DIR" \;
# 复制链接文件
find "$SOURCE_DIR" -type l -name "$pattern" | while read -r link; do
source_file=$(readlink -f "$link") # 获取链接指向的文件绝对路径
dest_file="$DEST_DIR/$(basename "$link")" # 计算目标路径
link_target=$(readlink "$link") # 获取链接的目标路径
# 如果链接指向的文件存在,则复制链接指向的文件
if [ -e "$source_file" ]; then
cp -P "$source_file" "$DEST_DIR"
fi
# 创建链接文件
ln -sf "$link_target" "$dest_file"
done
}
# 调用函数以复制各种模式的共享库文件和链接
copy_files_and_links "*.so"
copy_files_and_links "*.so.1"
copy_files_and_links "*.so.1.0"
copy_files_and_links "*.so.1.0.0"
# 结束脚本
echo "Shared library files have been copied to $DEST_DIR"
2.创建app,打包为tar,gz
#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
export LD_LIBRARY_PATH=$SCRIPT_DIR/lib_sub:$LD_LIBRARY_PATH
linuxdeployqt xxx -appimage
echo "---------------------creat done!-------------------------"
tar -czvf myapp.tar.gz *
# 解压
# tar -xzvf myapp.tar.gz -C /path/to/directory
# 例如
# tar -xzvf myapp.tar.gz -C ~/www/
echo "---------------------create myapp.tar.gz done-------------------------"
3.运行脚本
#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
export LD_LIBRARY_PATH=$SCRIPT_DIR/lib_sub:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$SCRIPT_DIR/lib:$LD_LIBRARY_PATH
./AppRun