Linux 打包 QT 程序

Linux 打包 QT 程序,第1张

打包平台:安装有QT开发环境的linux系统

发布平台:未安装有QT开发环境的linux系统

以下使用到的路径需要根据自己环境不同进行修改:

    qt安装路径:/opt/Qt5.12.5

    freetype安装路径:/opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/            //包含三个文件libfreetype.so、libfreetype.so.6、libfreetype.so.6.17.0

    dbus安装路径:/opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/                //包含三个文件libdbus-1.so、libdbus-1.so.3、libdbus-1.so.3.26.0

    项目路径:/home/cs/Code/test/

    项目名称:test

使用到的脚本文件:

    copylib.sh

        LibDir=$PWD"/lib"

        Target=$1

        lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))

        $(mkdir $LibDir)

        for Variable in ${lib_array[@]}

        do

            cp "$Variable" $LibDir

        done

    copylib2.sh

        sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libfreetype.so ./

        sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libfreetype.so.6 ./

        sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libfreetype.so.6.17.0 ./

        sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libdbus-1.so ./

        sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libdbus-1.so.3 ./

        sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libdbus-1.so.3.26.0 ./

    test.sh

        appname=`basename $0 | sed s,\.sh$,,`

        dirname=`dirname $0`

        tmp="${dirname#?}"

        if [ "${dirname%$tmp}" != "/" ]then

        dirname=$PWD/$dirname

        fi

        LD_LIBRARY_PATH=$dirname

        export LD_LIBRARY_PATH

        $dirname/$appname "$@"

    注意事项:该流程里的脚本都是777权限,如遇权限问题请使用 chmod 777 copylib.sh 命令

    首先将程序release编译,在项目路径里找到编译生成的文件夹【build-Test-Desktop_Qt_5_12_5_GCC_64bit-Release】,在这个文件夹内(注意,很重要)建立  copylib.sh 脚本,并执行 ./copylib.sh test 。执行完成之后应该有一个lib文件夹,将lib文件夹内的所有内容和test程序复制到一个新的文件夹下【test-release】。

    在QT安装目录下找到  【/5.12/gcc_64/plugins/platforms】 文件夹,建立  copylib.sh  脚本,并执行  ./copylib.sh libqxcb.so  。执行完成之后将这个 文件夹 复制到【test-release】文件夹中。然后在【test-release/platforms】文件夹中,将【test-release/platforms/lib】文件夹里的所有内容 剪切 到【test-release】文件夹里,并删除lib文件夹。

    在【test-release】目录下建立 copylib2.sh 脚本,并执行 ./copylib2.sh 。

    至此,所有所需的库文件应该都打包完毕。

    在【test-release】目录下建立 test.sh 脚本,利用该脚本启动程序,启动命令为 ./test.sh 。

    遗留问题点:

        1.debug版本未测试,不知道是否可行。

        2.platforms文件夹不仅在【/5.12/gcc_64/plugins/platforms】存在,还在【/Tools/QtCreator/lib/Qt/plugins/platforms】存在。在成功之前一直用的Tools目录下的,但是也有别的细节不一样,待考证。

        3.脚本执行,或者说库的复制顺序似乎有关系。第一次copylib.sh 和 第二次copylib.sh 时会用一部分重叠。待考证哪个优先。

qt程序动态打包步骤

1. 从可运行程序的文件中拿出可执行文件

2. 终端下使用ldd命令查看需要的连接库

例如 ldd + 可执行文件

3. 把ldd查询到的所有需要的库导出

4. 编写.sh文档(.sh文件命名必须与可执行文件名字一样例:可执行文件名 test, .sh 文件名为 test.sh)

.sh文件代码如下:

#!/bin/sh

appname=`basename $0 | sed s,\.sh$,,`

dirname=`dirname $0`

tmp="${dirname#?}"

if [ "${dirname%$tmp}" !="/" ]then

dirname=$PWD/$dirname

fi

LD_LIBRARY_PATH=$dirname

export LD_LIBRARY_PATH

$dirname/$appname $*

5. 把所用到的库,可执行文件, .sh文件放到同一目录下

6. 终端中进入这一目录,输入:

chmod +x test.sh

7. 执行程序点击.sh文件或者终端输入:

./test.sh

 一、准备

busybox 1.14.1

qt-embedded-linux-opensource-src-4.5.1

tslib 1.4

gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)

构建一个新的根文件系统目录,路径为

/root/rootfs

二、具体步骤:

1、编译安装busybox

在官网下载最新版。可以参考如下几处要修改的地方:

Busybox Settings --->Build Options --->(arm-linux-)Cross Compiler prefix

Busybox Settings --->Installation Options --->[]Dont't use /usr

Busybox Settings --->Installation Options --->(/root/rootfs) BusyBox installation prefix

Busybox Settings --->Busybox Library Tuning --->[*] Fancy Shell prompts

输入如下命令,编译并安装。

# makemake install

2、编译安装tslib

# ./autogen.sh

# ./configure -prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/ -host=arm-linux ac_cv_func_malloc_0_nonnull=yes

# makemake install

安装目录指明为 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/

主要是为了在编译QTE时,不用指定tslib的头文件和库文件,方便以后程序开发。

注意:在做这一步前,需要做一个目录链接

在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/目录下

# ln -s ../../usr/include ./

3、编译安装QTE

1)、最基本的配置

# ./configure -prefix /usr -embedded arm -xplatform qws/linux-arm-g++ -depths 16 -qt-mouse-tslib

-prefix /usr 使用这个配置,编译后的QTE库文件即可放在目标文件系统的/usr/lib下,而不是默认/usr/local/Trolltech/QtEmbedded-4.5.1 这个很深的目录

2)、编译

# make

# cp lib/* /root/rootfs/usr/lib -rd 将QTE库文件拷贝到根文件系统的目录

# cp plugins /root/rootfs/usr -rd 将QTE插件目录拷贝到根文件系统的目录

4、根文件系统的设置

1)、这时/root/rootfs/usr下应该有 bin etc include lib sbin目录

tslib生成的etc目录,包含一个tslib的配置文件 nf,编辑此文件,去掉module_raw input前的注释

# mv etc ../ 移动到rootfs的根目录

2)、进行一次清理 *** 作

#arm-linux-strip lib/*.so

#arm-linux-strip usr/lib/*.so

3)、编辑etc/profile,添加以下内容

export QWS_MOUSE_PROTO=Tslib:/dev/event0

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=/etc/nf

export TSLIB_PLUGINDIR=/usr/lib/ts

最后,通过mkyaffs2image 制作镜像,烧写镜像,启动ts_calibrate校验触屏即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8738449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存