精华内容
下载资源
问答
  • release要发布程序b) 通过`windeployqt`打包3)方法二 — 发布成独立的可执行exe文件a) 下载工具b) 打包4)方法三 — 打包成安装包发布a)通过Inno Setup工具打包b)通过Advanced Installer工具打包3.Linux下的...
  • Qtlinux发布步骤详解 前提:环境下已经安装了Qt的环境 1、首先创建根目录文件夹,此处例如:/home/user/exeDir 2、将Qt编译后的可执行文件放入到/home/user/exeDir目录下 此处例如可执行文件名为:test 3、在/...

    Qt在linux下发布步骤详解
    前提:环境下已经安装了Qt的环境
    1、首先创建根目录文件夹,此处例如:/home/user/exeDir
    2、将Qt编译后的可执行文件放入到/home/user/exeDir目录下
    此处例如可执行文件名为:test
    3、在/home/user/exeDir目录下创建一个脚本文件,名字为:pack.sh,内容如下所示,可以给其可执行权限命令为:chmod +7 pach.sh,执行脚本文件

    #!/bin/sh
    exe="test" #你需要发布的程序名称
    des="/home/user/exeDir" #创建文件夹的位置
    deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')
    cp $deplist $des
    

    4、直接运行可执行文件test,可能出现以下问题(这个问题也是必然会出现)

    This application failed to start because it could not find or load the Qt platform plugin “xcb”
    in “”.
    解决办法:我们添加环境变量,打印Qt具体出错,打开环境变量编辑
    vim /etc/profile
    最后一行添加:

    export QT_DEBUG_PLUGINS=1
    

    然后执行进行生效:source /etc/profile

    5、继续执行可执行文件test,出现以下全部错误
    QFactoryLoader::QFactoryLoader() checking directory path “/home/user/exeDir/platforms” …
    This application failed to start because it could not find or load the Qt platform plugin “xcb”
    in “”.

    可以发现并没有platforms目录,此时我们并没有这个目录,去安装Qt目录下进行把platforms复制,放入我们的目录下,例如我的目录为:/opt/Qt5.9.2/5.9.2/gcc_64/plugins/platforms

    6、继续执行可执行文件test,发现还是报错
    Cannot load library /home/csy/hzProject/exeDir/platforms/libqxcb.so: (/lib64/libQt5XcbQpa.so.5: symbol _ZNK15QPlatformWindow15safeAreaMarginsEv, version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)
    QLibraryPrivate::loadPlugin failed on “/home/csy/hzProject/exeDir/platforms/libqxcb.so” : “Cannot load library /home/csy/hzProject/exeDir/platforms/libqxcb.so: (/lib64/libQt5XcbQpa.so.5: symbol _ZNK15QPlatformWindow15safeAreaMarginsEv, version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)”
    This application failed to start because it could not find or load the Qt platform plugin “xcb”
    in “”.
    从错误中很容易指导,缺少libQt5XcbQpa.so.5这个库,到/opt/Qt5.9.2/5.9.2/gcc_64/lib目录下进行拷贝即可执行

    7、发布
    之后将此文件夹放到没有Qt环境的linux系统下也可以正常运行程序了

    8、总结
    对于linux发布这样的问题,可以使用这种方法,进行定位查找错误,首先执行脚本,将能够引入的库基本都引入,不能引入的进行错误查找。

    展开全文
  • Linux下打包发布Qt应用程序

    万次阅读 多人点赞 2018-10-27 12:46:42
    Linux下打包发布Qt应用程序Linux下打包发布Qt应用程序1. 编译文件2.巧用脚本文件新建文件添加脚本执行脚本打包发布 Linux下打包发布Qt应用程序 Linux下使用Qt进行开发的程序,如果想要在其他搭载Linux系统的主机上...

    Linux下打包发布Qt应用程序

    Linux下使用Qt进行开发的程序,如果想要在其他搭载Linux系统的主机上运行则需要将要发布的Qt程序依赖的一些动态链接库一起打包。具体做法如下:

    1. 编译文件

    在Qt中使用release的方式编译出可执行文件,然后新建一个文件夹,将可执行文件拷贝进去备用。

    2.巧用脚本文件

    这里以Server可执行文件为例。
    在新建的文件夹下,新建两个脚本文件:

    新建文件

    1. pack.sh
    2. Server.sh 这个脚本文件名必须和要发布的程序名字相同,所以为 Server
      新建文件后,文件夹包含内容如下:
      文件夹内容

    添加脚本

    pack.sh文件里添加以下内容:

    #!/bin/sh  
    exe="Server" #你需要发布的程序名称
    des="/home/mrzhong/server" #创建文件夹的位置
    deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
    cp $deplist $des
    

    然后向Server.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 "$@"
    

    执行脚本

    终端进入文件夹目录,运行:

    ./pack.sh
    

    可执行文件依赖的链接库将会拷贝到所在的目录,如图:
    alt
    在其他主机里面使用和可执行文件同名的脚本文件(这里为Server.sh)运行程序即可。

    打包发布

    最后将这个文件打包后拷贝到其他主机上即可运行。

    展开全文
  • Linux系统下实现QT程序打包发布

    千次阅读 2020-03-09 21:20:39
    二、打包发布的过程 1. 先使用Release编译QT程序 2. 程序编译成功后,会在指定目录下生成一个文件夹,里面就包含了可执行程序。 比如:build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release 3. 在这个(build-...

    一、环境介绍

    操作系统环境: ubuntu18.04 64位

    QT版本:  5.12

    二、打包发布的过程

    1.   先使用Release 编译QT程序

    2.  程序编译成功后,会在指定目录下生成一个文件夹,里面就包含了可执行程序。

     比如:  build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release

    3.  在这个(build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release)目录下一个脚本文件

      比如: lib_copy_qt.sh   代码如下:

    #!/bin/bash
    if [ $# != 1 ]
    then
        echo "传参数顺序: ./脚本.sh  <要发布的可执行文件文件>"
        exit 0
    fi
    
    LibDir=$PWD/lib
    mkdir $LibDir
    
    Target=$1
    
    lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
    
    for Variable in ${lib_array[@]}
    do
        cp "$Variable" $LibDir
    done

      这个脚本的功能就是查找可执行文件的依赖库,将依赖库拷贝到当前目录下的lib文件夹里(这个lib是脚本创建的)。

      linux的ldd命令也可以查找可执行文件的依赖库,这个脚本的功能和ldd命令功能一样,写成脚本是为了方便,查找之后就拷贝过来。

       ldd命令使用方法示例:  

    wbyq@wbyq:~/qt_code$ ldd build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release/ffmpeg_code 
    	linux-vdso.so.1 (0x00007ffe7a5dd000)
    	libavcodec.so.58 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libavcodec.so.58 (0x00007f0c8a764000)
    	libavutil.so.56 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libavutil.so.56 (0x00007f0c8a457000)
    	libavdevice.so.58 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libavdevice.so.58 (0x00007f0c8a244000)
    	libavformat.so.58 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libavformat.so.58 (0x00007f0c89deb000)
    	libswscale.so.5 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libswscale.so.5 (0x00007f0c89b60000)
    	libQt5Widgets.so.5 => /home/wbyq/Qt5.12.6/5.12.6/gcc_64/lib/libQt5Widgets.so.5 (0x00007f0c89311000)
    	libQt5Gui.so.5 => /home/wbyq/Qt5.12.6/5.12.6/gcc_64/lib/libQt5Gui.so.5 (0x00007f0c88ac4000)
    	libQt5Core.so.5 => /home/wbyq/Qt5.12.6/5.12.6/gcc_64/lib/libQt5Core.so.5 (0x00007f0c88329000)
    	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0c87fa0000)
    	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0c87d88000)
    	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0c87997000)
    	libswresample.so.3 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libswresample.so.3 (0x00007f0c8777a000)
    	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0c873dc000)
    	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f0c871bf000)
    	libx264.so.157 => /home/wbyq/work_pc/x264-snapshot-20181217-2245/_install/lib/libx264.so.157 (0x00007f0c86c93000)
    	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0c86a74000)
    	libavfilter.so.7 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libavfilter.so.7 (0x00007f0c8654c000)
    	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f0c86324000)
    	libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007f0c86120000)
    	libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007f0c85f18000)
    	libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007f0c85c11000)
    	libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f0c85985000)
    	libicui18n.so.56 => /home/wbyq/Qt5.12.6/5.12.6/gcc_64/lib/libicui18n.so.56 (0x00007f0c854ec000)
    	libicuuc.so.56 => /home/wbyq/Qt5.12.6/5.12.6/gcc_64/lib/libicuuc.so.56 (0x00007f0c85134000)
    	libicudata.so.56 => /home/wbyq/Qt5.12.6/5.12.6/gcc_64/lib/libicudata.so.56 (0x00007f0c83751000)
    	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0c8354d000)
    	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f0c8334b000)
    	libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f0c83034000)
    	/lib64/ld-linux-x86-64.so.2 (0x00007f0c8c06b000)
    	libpostproc.so.55 => /home/wbyq/work_pc/ffmpeg-4.2.2/_install/lib/libpostproc.so.55 (0x00007f0c82e16000)
    	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f0c82c12000)
    	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f0c82a0c000)
    	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0c82804000)
    	libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f0c825d3000)
    	libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f0c8231d000)
    	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f0c820ab000)
    	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f0c81e96000)
    	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f0c81b5e000)

       脚本的使用方法示例:

    wbyq@wbyq:~/qt_code$ cd build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release/
    wbyq@wbyq:~/qt_code/build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release$ ./lib_copy_qt.sh ffmpeg_code 
    wbyq@wbyq:~/qt_code/build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release$ ls
    ffmpeg_code  lib_copy_qt.sh  mainwindow.o  moc_mainwindow.cpp  moc_predefs.h
    lib          main.o          Makefile      moc_mainwindow.o    ui_mainwindow.h
    wbyq@wbyq:~/qt_code/build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release$ 
    

      执行完这一步之后,在当前目录下就会生成一个lib文件夹,然后在其他再创建一个目录,当做最终的APP发布存放目录。

      比如: camera_linux_app

      (1).  将上一步生成的lib目录下的所有文件拷贝到camera_linux_app目录下。

      (2).  将build-ffmpeg_code-Desktop_Qt_5_12_6_GCC_64bit-Release目录下的程序可执行文件也拷贝到camera_linux_app目录下。

      (3).  为了发布过程不出现各种BUG,找不到库、找不到平台等等一系列问题,现在使用一个笨办法。

       将QT使用的编译器目录下的所有库拷贝到camera_linux_app目录下,有覆盖的就不管。

      我的目录路径是: /home/wbyq/Qt5.12.6/5.12.6/gcc_64/lib

      (4).   将QT使用的编译器目录下的plugins文件夹拷贝到camera_linux_app目录下。

      (5).  在camera_linux_app目录下编写一个app启动脚本。 脚本名称和可执行程序的名字样,后缀为.sh。

        比如: 我的可执行程序名字是ffmpeg_code  。那么脚本的名字就是ffmpeg_code.sh

        代码如下:   (因为我的程序用到了FFMPEG相关的库,所有里面加了FFMPEG相关的东西)

    #!/bin/sh
    LD_LIBRARY_PATH=$PWD/ffmpeg_x264/ffmpeg/lib:$PWD/ffmpeg_x264/x264/lib:$LD_LIBRARY_PATH
    echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
    
    
    PATH=$PATH:$PWD/ffmpeg_x264/ffmpeg/bin
    echo "PATH=$PATH"
    
    appname=`basename $0 | sed s,\.sh$,,`
    
    dirname=`dirname $0`
    tmp="${dirname#?}"
    
    if [ "${dirname%$tmp}" != "/" ]; then
    dirname=$PWD/$dirname
    fi
    LD_LIBRARY_PATH=$dirname:$LD_LIBRARY_PATH
    echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
    export LD_LIBRARY_PATH
    export PATH
    export QT_QPA_PLATFORM_PLUGIN_PATH=$PWD/plugins
    $dirname/$appname "$@"
    

      (6).  脚本代码编写好之后,都要修改权限为可执行。 例如:  chmod 777 xxx.sh

      (7).  将camera_linux_app目录打包。例如:  tar cvf  camera_linux_app.tar camera_linux_app/

      (8).   接下来就可以将这个打包的文件拷贝到其他没有QT环境的电脑上解压运行了。

         运行的时候,执行(camera_linux_app)目录下的脚本文件(ffmpeg_code.sh)即可。 

       这样打包占用的空间比较大,拷贝了很多没有用到的库,但是不会出现各种库缺失的问题。。

     

     

     

    下面公众号里有全套QT、C、C++基础学习教程:

    展开全文
  • LinuxQT 程序发布

    2018-04-25 11:21:07
    为便于描述,我们这里假设生成的程序名称为test(即要发布的程序名称)1. QtCreate使用Release版本编译将release编译后生成的目录下的可执行程序(如:test)复制到一个空目录下目录自行建立:mkdir ~/Camera2.使用...
    为便于描述,我们这里假设生成的程序名称为test(即要发布的程序名称)
    

    1. QtCreate使用Release版本编译

    将release编译后生成的目录下的可执行程序(如:test)复制到一个空目录下

    目录自行建立:

    mkdir ~/Camera
    2.使用ldd命令查看和导出需要的库

    在步骤1的目录下新建一个pack.sh文件,文件内容如下:

    exe="test"                                               //你需要发布的程序名称
    des="/home/happylife/Camera/Test"                         //步骤1中的目录即本文件所在目录
    deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }') 
    cp $deplist $des
    文件中有两处中文注释的地方需要根据自己需要进行修改

    3.执行pack.sh

    chmod +x pack.sh  //执行权限
    ./pack.sh         //执行
    
    4.编写执行程序的sh文件

    在此目录下再新建一个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 "$@"
    

    5.执行程序

    chmod +x test.sh  //执行权限
    ./test.sh        //执行

    将此目录打包发布即可,注意需要执行程序时是运行test.sh文件,不是release生成的可执行程序

    展开全文
  • Linux系统中打包发布Qt程序

    千次阅读 2019-01-22 11:17:51
    Linux系统下可以手写一个脚本文件,充分利用ldd命令进行打包。 实现 废话不说,步骤如下: QtCreator使用Release版本进行编译,并将编译后生成的可执行程序(MyApp)复制到一个空目录下。 在这个空目录下新建一个...
  • linuxQT5 程序打包工具,打包完成后是一个单独可运行文件,就像window下exe文件一样双击可运行,可以脱离QT环境。主要是github下载操蛋,下载下来供各位朋友使用。
  • exe="test" #你需要发布的程序名称 des="/home/dhn/test" #创建文件夹的位置 deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }') cp $deplist $des 第二个脚本用于程序启动run.sh,
  • Linux打包发布qt应用程序一.环境介绍二.编译文件三.使用脚本文件获取依赖库文件1. 编写脚本文件2. 赋予脚本文件权限并执行3. 拷贝所依赖的qt平台的库文件注:直接ldd命令和可能遇到缺少库问题四.编写执行脚本1. 编写...
  • 第一次用QT开发程序并打包发布到任意Linux系统上,期间踩了很多坑,最后目标达成,付出艰辛之后取得的成绩才更可贵啊,现将过程及问题总结一下,希望有相同需求的朋友少走点弯路。 网上有很多LinuxQT打包发布的...
  • 无论是在Windows下还是Linux下编译好的QT程序基本都要提供给其他人用,那么就涉及到了发布的问题,即如何在没有编译环境的机器上运行你编译好的程序。 往往程序不能运行都是环境(缺少动态库)不对,导致不能正常...
  • 一.qt程序用 linuxdeployqt打包发布步骤:  1.新建一文件夹,将qt编译生成的release下的xxx(可执行文件)拷到该文件夹下。  2.进入此文件夹,打开命令行模式,进入root权限。运行命令linuxdeployqt xxx -appimage ...
  • qt菜鸟,需要将编好的软件在没有安装Qtlinux系统下运行,首先联想到windos下有windeployqt 这个环境打包命令,这个命令非常好用,所以查了查linux下有没有这个 命令,发现还真的有这个命令,接下来就是在网上找...
  • linuxQt 编译生成的程序不能鼠标双击运行,只能在终端用命令行运行。 解决方法:在.pro文件添加 QMAKE_LFLAGS += -no-pie 重新编译即可。 参考链接:https://www.pianshen.com/article/158088109/
  • 1、QT切换到release模式,编译后在构建目录生成可执行文件,例如setup.exe,把该文件复制到一个单独文件夹; 2、在开始菜单找到QT,在里面找cmd命令行程序,类似“Qt 5.7 64-bit for Desktop (MSVC 2013)”,点击...
  • LinuxQt程序的打包发布

    千次阅读 2018-07-11 14:53:59
    转载地址–LinuxQt程序的打包发布 以下是转载内容—&gt;程序以test为例:QtCreate使用Release版本编译从可运行程序的文件中拿出可执行文件,例:test终端下使用ldd命令查看需要的连接库,例:ldd test(补充,...
  • 说明:使用Qt自带工具“windeployqt.exe”来拷贝大部分的动态库(.dll),一般有以下两种方法。 前提,将Qt编译方式选为:Release,把编译好的exe文件拷贝到一个空的文件夹下。如图: ①(简单、省事)在Qt的安装...
  • ​ 简介: qt项目在Linux平台上面发布成可执行程序.run,或是免安装的绿色版本、亦或者安装形式的安装包。 文章目录本博文的简述or解决问题?开发平台环境:重要提示:项目在Linux平台发布:本次心得总结:参考...
  • LinuxQt 打包发布

    千次阅读 2019-11-14 20:13:32
    我们知道,在 Windows 中部署 Qt 应用程序时,通常会将可执行程序、相关的 Qt 库、以及平台插件放在同一目录中。但对于 Linux 而言,如果...
  • Linux Qt程序打包成一个可执行文件

    万次阅读 2017-06-20 11:38:02
    最近用Qt写了一个上位机, 而且是跨平台(Windows, Linux, ARM-Linux), 开发完成后需要对程序进行打包, windows的打包非常容易,选择非常多, 但是linux下面的选择就少了些. 方案的选择 Qt官方有页面专门说明Linux X11的...
  • 最近,在学习QT5的过程中,想尝试着把自己写的工程程序给打包发布出来,在任何一台windows系统都能运行,这样就不会限于电脑需不需要安装QT安装包了。 首先,先介绍自己使用的环境。我使用的QT版本是。我的电脑...
  • LinuxQt程序打包发布并设置图标

    千次阅读 2019-10-12 23:59:32
    之前整理过一篇文章是关于Windows下Qt打包发布与设置环境变量的,那篇文章里面Qt发布的程序是没有设置应用程序图标的,之后会再整理一篇文章的,顺便测试下使用Qt插件在...
  • QtLinux、Windows端打包发布的讲解,主要讲述:Windows端的打包,使用Qt自带的windeployqt工具处理,然后再用Enigma Virtual Box软件简化打包,只需要拷贝一个exe文件至其他电脑运行,运行成功!
  • Linux下打包发布Qt程序

    2021-07-14 09:36:17
    Linux下打包发布Qt应用程序 Linux下使用Qt进行开发的程序,如果想要在其他搭载Linux系统的主机上运行则需要将要发布Qt程序依赖的一些动态链接库一起打包。具体做法如下: 1、编译文件 在Qt中使用release的方式编译...
  • 进入qt目录中的release目录,找到编译出的执行程序,然后拷到另一个空的文件夹3.在文件夹中建立一个 .sh 文件,名字随意,在里面写入#!/bin/sh exe="Reader" #发布的程序名称 des="/home/yy/Desktop/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,514
精华内容 1,405
关键字:

linuxqt发布exe

linux 订阅