# SENHE_IIMTROBOT **Repository Path**: suhai931/SENHE_IIMTROBOT ## Basic Information - **Project Name**: SENHE_IIMTROBOT - **Description**: 森和坐垫发泡喷涂项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-06-15 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 森和坐垫发泡喷涂机械臂 cmake : Failed to find “GL/gl.h“ in “/usr/include/libdrm“ 安装opengl sudo-get update sudo apt-get -f install 安装opengl sudo apt install mesa-common-dev 安装opengl sudo apt-get install libgl1-mesa-dev 安装opengl sudo apt-get install mesa-common-dev sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev sudo apt install cmake 源码: 森和坐垫发泡喷涂机械臂IIMTROBOT系统集成 运行系统环境:ubuntu 16.04 及以上 开发工具:clion 语言:c++ 库:QT 启动: run/main.cpp 代码中加载路点值信息: 文件路径: SENHE_IIMTROBOT/src/PLC_driver/MoveScript.cpp 30行 MoveScript.h 35行 运行软件: 具体软件维护路点值操作: 在当前这个moveScript.txt文件中打开控制台输入下面这条命令按回车更新路点值: sudo cp ./moveScript.txt /home 工控机权限密码123456 路点值格式: movej_* 对应的是6个关节角度,单位为度 movel_* 对应的是机械臂末端位置,前3位: x y z 的单位为毫米,后3为对应的是3个姿态单位为弧度 digital_* 操作串口 维护路点值注意:文本注释前必须加 # 字符区分 更改完路点值后不要直接启动自动化,进入 /home 中 查看 moveScript.txt脚本数据是否准确。 日志: 目录下创建 /home/demo/Log_robot/ 克隆项目: git clone https://gitee.com/suhai931/senhe_iimtrobot.git 克隆 plc、机械臂,模拟器(开发阶段用): git clone https://gitee.com/suhai931/SENHE_NETWORKTEST.git 编译原码: cd /home/iimt/workspace/senhe_iimtrobot ./make.sh 运行程序: cd /home/iimt/workspace/senhe_iimtrobot/build/bin ./senhe 或 双击senhe #打包 cd /home/iimt/workspace/senhe_iimtrobot/senhe cp /home/iimt/workspace/senhe_iimtrobot/build/bin/senhe /home/iimt/workspace/senhe_iimtrobot/senhe linuxdeployqt ./senhe -appimage 运行程序: 双击 AppRun #=============================== moveScript.txt 脚本详细说明========================================== 例1: movel_SH_56_002_01{ -537.33 , -262 , 405.92 , 0.03 , -0.26 , -1.67 } 前缀 movel:对应的是机械臂末端位置,前3位: x y z 的单位为毫米,后3为对应的是3个姿态单位为弧度(直接抄示教器上显示的数据) 例2: movej_SH_56_002_02{ 14.832 , 25.933 , -99.877 , -13.7 , 87.907 , -20.967 } 前缀 movej:对应的是6个关节角度,单位为度(直接抄示教器上显示的数据) 中间 SH_56_002:与plc定义的协议,客户端收到 plc发来的 SH_56_002 指令后程序会调用包含 SH_56_002 这个字段的所有指令; (注意:与plc定义的协议 SH_56_002的长度需要与其它制定的协议的最大长度一致,。如果协议有1000个,最大协议是SH_56_1000,那么我们 这个002的协议应该写成 SH_56_0002) 最后一位:01 代表执行这条脚本的顺序; (例:现在收到SH_56_002这个协议后需要依次执行 5个脚本,顺序从小到大 movel_SH_56_002_1 movel_SH_56_002_2 movel_SH_56_002_3 movel_SH_56_002_4 movel_SH_56_002_5 ) (注意:1 的位数必须与最大的5位数保持一致 1位或者可以都是2位,前面补0;如果有10条脚本最大脚本号是10,那么个位的脚本号前面要补 0,都做成2位的 movel_SH_56_002_**;如果最大脚本号是100,那么个位的脚本号前面补2个0,十位的脚本号补1个0,都做成3位的 movel_SH_56_002_***) (例: movel_SH_56_002_001 movel_SH_56_002_002 movel_SH_56_002_*** movel_SH_56_002_011 movel_SH_56_002_*12 movel_SH_56_002_*** movel_SH_56_002_100 ) 程序运行时加载脚本的路径 /home 执行指令,把维护好的脚本拷贝过去 sudo cp ./moveScript.txt /home 工控机权限密码123456 #========================================================================= //1.QString转换String string s = qstr.toStdString(); //2.String转换QString QString qstr2 = QString::fromStdString(s); //QString 转换成char类型支持中文 infoVect[0].Answer:QString类型 const char* text; QByteArray ba = infoVect[0].Answer.toLocal8Bit(); // std::string string = infoVect[0].Answer.toStdString();//QString转换String // int size= ba.size()>40?ba.size():100; printf("=========size=============: %d\n",size); char pdata[5000]; memcpy(pdata, ba.data(), ba.size()); text=pdata; //cha转qstring char buf[16] = {0}; char buf1[16] = {0}; tt = time(NULL); strftime(buf, 16, "%y-%m-%d %H:%M:%S", localtime(&tt)); //1 QString qss="[本地时间: "+ QString(QLatin1String(buf)) +" ]"; //2 QString logfileTimeName = QString(buf1); //清除char缓存 char pdata[5000]; source ~/.bashrc #========================================================================= #====================================打包操作实测有效=================================================== https://blog.csdn.net/weixin_40134955/article/details/108753274 打包成安装包 不同的linux发行版默认支持的安装包是不同的,所以打包方法也是不同的,我是用的系统是Ubuntu16.04 32位 1.安装linuxdeployqt 该工具的帮助文档:https://github.com/probonopd/linuxdeployqt/blob/master/README.md 有兴趣,可以自己看看。 下载linuxdeployqt 由于我使用的系统是32位的,因此不能使用https://github.com/probonopd/linuxdeployqt/releases中的64位可执行文件,因此需要直接下载源码来编译,当然,这种方法在64位的Ubuntu16.04上同样适用。由于从github下载较慢,因此我把源码保存到了百度网盘中方便下载。 链接:https://pan.baidu.com/s/1QJeANlAGFGRlUscMTan0wg 提取码:6z9q 编译linuxdeployqt 使用已经搭建好的静态编译环境来编译 $ tar -xzvf linuxdeployqt-7.tar $ cd linuxdeployqt-7 $ qmake linuxdeployqt.pro $ make 安装linuxdeployqt 将编译生成的可执行文件复制到/usr/local/bin目录,这样,我们就可以在其他目录访问了 $ cd bin $ sudo cp linuxdeployqt /usr/local/bin 测试是否安装成功 $ linuxdeployqt --version 2.安装patchelf sudo apt-get intall patchelf 3.安装appimagetool 64位: $ sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool $ sudo chmod a+x /usr/local/bin/appimagetool 32位: $ sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-i686.AppImage" -O /usr/local/bin/appimagetool $ sudo chmod a+x /usr/local/bin/appimagetool 4. Qt动态库路径设置到环境变量 如果程序是静态编译的,直接跳过该步骤。 工具会根据生成的可执行文件,自动搜索依赖,故我们需要确保Qt库的相关路径设置到环境变量中,这样工具在搜索时才能找到,并拷贝它们。 另外拷贝文件,对环境变量的使用,不想要重启系统那么麻烦,所以我们修改.bashrc文件,仅对当前用户永久有效。 $ vim ~/.bashrc export PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/bin:$PATH export LIB_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/lib:$LIB_PATH export PLUGIN_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/plugins:$PLUGIN_PATH export QML2_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/qml:$QML2_PATH 或 【具体看自己的qt库】 export PATH=/home/iimt/3rdparty/qt/bin:$PATH export LIB_PATH=/home/iimt/3rdparty/qt/lib:$LIB_PATH export PLUGIN_PATH=/home/iimt/3rdparty/qt/plugins:$PLUGIN_PATH #export QML2_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/qml:$QML2_PATH 使用source命令让文件立即生效。 source ~/.bashrc 然后,对环境变量测试下,是否设置正确。如下 qmake -v 创建一个文件夹,名称最好是用可执行文件的名称,然后将senhe可执行文件复制到此文件夹下; cd /home/iimt/workspace/senhe_iimtrobot/build/bin cp senhe /home/iimt/workspace/senhe_iimtrobot/senhe #打包 cd /home/iimt/workspace/senhe_iimtrobot/senhe linuxdeployqt ./senhe -appimage 执行上面命令出现错误提示信息,不用管,只是创建了一个需要你自己编辑的desktop文件;到这一步,就把可执行文件的动态库等依赖文件都复制到该文件夹中了。 五、编写开机脚本 runApp.sh 创建 runApp.sh $ vi runApp.sh 2. 写入以下内容 #!/bin/bash export LD_LIBRARY_PATH=/app/lib:$LD_LIBRARY_PATH export QT_PLUGIN_PATH=/app/plugins:$QT_PLUGIN_PATH export QML2_IMPORT_PATH=/app/qml:$QML2_IMPORT_PATH ./serialport 3. 再给运行开机脚本runApp.sh添加可执行权限; $ chmod +x runApp.sh 此时运行开机脚本,则可启动程序。其实到这一步就可以发布了,压缩成一个压缩包发布即可,可如果想继续打包成deb包,可以看下一步。 四、编写linux桌面图标启动(可选步骤) 修改qt目录下的desktop文件,可以按照ubuntu官方提示修改。 https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles 1.新建空白文档,添加以下内容,然后重命名为 serialport.desktop [Desktop Entry] Version=1.0 Name=serialport Comment= this app use for zjy Exec=/home/book/qt5.12/serialComm/SerialPort-linuxdeployqt/serialport Icon=/home/book/Pictures/icon.png Terminal=false Type=Application Categories=Utility;Application; 2.复制serialport.desktop文件 #-- 全局安装(所有用户可用),将xxx.desktop 复制到/usr/share/applications #-- 当前用户可用, 将xxx.desktop 复制到 ~/.local/share/applications 目录即可 $ sudo cp serialport.desktop /usr/share/applications #复制文件 3.到 /usr/share/applications 寻找 serialport.desktop,图标并没有正确显示,但是双击是可以运行的; #======================================================================= #================================dabao======================================= 打包1: cd /home/iimt/workspace/senhe_iimtrobot ./make.sh cd /home/iimt/workspace/senhe_iimtrobot cp pack.sh /home/iimt/workspace/senhe_iimtrobot/build/bin cp senhe.sh /home/iimt/workspace/senhe_iimtrobot/build/bin cd /home/iimt/workspace/senhe_iimtrobot/build/bin sudo chmod 777 * ./pack.sh 把 build 拷贝到其它主机上 cd /home/iimt/workspace/senhe_iimtrobot/build/bin #启动主程序 ./senhe.sh 或 ./senhe 打包2: cd /home/iimt/workspace/senhe_iimtrobot ./make.sh cd /home/iimt/workspace/senhe_iimtrobot/build/ make package 双击senhe 或 ./senhe #============================================================================ https://blog.csdn.net/qq_27350133/article/details/83445258?utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control Linux下打包发布Qt应用程序 Linux下打包发布Qt应用程序 1. 编译文件 2.巧用脚本文件 新建文件 添加脚本 执行脚本 打包发布 Linux下打包发布Qt应用程序 Linux下使用Qt进行开发的程序,如果想要在其他搭载Linux系统的主机上运行则需要将要发布的Qt程序依赖的一些动态链接库一起打包。具体做法如下: 1. 编译文件 在Qt中使用release的方式编译出可执行文件,然后新建一个文件夹,将可执行文件拷贝进去备用。 2.巧用脚本文件 这里以Server可执行文件为例。 在新建的文件夹下,新建两个脚本文件: 新建文件 pack.sh 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 1 可执行文件依赖的链接库将会拷贝到所在的目录,如图: 在其他主机里面使用和可执行文件同名的脚本文件(这里为Server.sh)运行程序即可。 打包发布 最后将这个文件打包后拷贝到其他主机上即可运行。 ================================================================= https://blog.csdn.net/qq_29935433/article/details/104684523 章目录 CMakeLists.txt关于打包部分的设置 版本控制信息 添加一些额外的依赖文件 其他选项 打包操作 问题及解决方案 问题:deb包的描述不对 附: control 文件字段解析 preinst文件 postinst文件 prerm文件 postrm文件 dpkg相关指令解析 cpack是cmake提供的一个打包工具 CMakeLists.txt关于打包部分的设置 版本控制信息 #准备的版本设置 SET(MAJOR_VERSION 1) SET(MINOR_VERSION 0) SET(PATCH_VERSION 0) #说明要生成的是deb包 SET(CPACK_GENERATOR "DEB") ##############设置debian/control文件中的内容############### #设置版本信息 SET(CPACK_PACKAGE_VERSION_MAJOR "${MAJOR_VERSION}") SET(CPACK_PACKAGE_VERSION_MINOR "${MINOR_VERSION}") SET(CPACK_PACKAGE_VERSION_PATCH "${PATCH_VERSION}") #设置安装包的包名,打好的包将会是packagename-version-linux.deb,如果不设置,默认是工程名 set(CPACK_PACKAGE_NAME "cn.net.pikachu.bulbasaur") #设置程序名,就是程序安装后的名字 set(CPACK_DEBIAN_PACKAGE_NAME "bulbasaur") #设置架构 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") #设置依赖 SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6)") #设置description SET(CPACK_PACKAGE_DESCRIPTION "pro-cc service") #设置联系方式 SET(CPACK_PACKAGE_CONTACT "support@pro.com") #设置维护人 set(CPACK_DEBIAN_PACKAGE_MAINTAINER "PikachuHy") include(CPack) 添加一些额外的依赖文件 ##############debian/control设置完成了,下面设置控制脚本,动态库,changelog等################# #lib目录下保存这一些动态库和安装控制脚本(postinst、postrm、preinst、prerm) #doc目录下是changelog和copyright等文件 SET(LIBS_DIR "$ENV{DBXML_DIR}/lib") SET(DOCS_DIR ${CMAKE_SOURCE_DIR}/doc) #将pro-cc.conf文件安装时copy到/etc/init下 INSTALL(FILES ${CMAKE_SOURCE_DIR}/pro-cc.conf DESTINATION /etc/init) #将库文件安装到/usr/lib下 INSTALL(FILES ${LIBS_DIR}/libdb-4.8.so ${LIBS_DIR}/libdbxml-2.5.so ${LIBS_DIR}/libxerces-c-3.0.so ${LIBS_DIR}/libxqilla.so.5 ${LIBS_DIR}/libxqilla.so.5.0.2 DESTINATION /usr/lib) 其他选项 #设置section set(CPACK_DEBIAN_PACKAGE_SECTION "utils") #设置priority set(CPACK_DEBIAN_PACKAGE_PRIORITY "Optional") 打包操作 #打开工程目录,即外层CMakeLists.txt所在的目录 $ mkdir build && cd build $ cmake .. $ make package 问题及解决方案 问题:deb包的描述不对 解决方案: - SET(CPACK_PACKAGE_DESCRIPTION "描述内容") + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "描述内容") 附: control 文件字段解析 字段 用途 例子/其他 Package 程序名称 中间不能有空格 Version 软件版本 Description 程序说明 Section 软件类别 utils, net, mail, text, x11 Priority 软件对于系统的重要程度 required, standard, optional, extra等; Essential 是否是系统最基本的软件包 yes/no,若为yes,则不允许卸载(除非强制性卸载) Architecture 软件所支持的平台架构 i386, amd64, m68k, sparc, alpha, powerpc等 Source 软件包的源代码名称 Depends 软件所依赖的其他软件包和库文件 若依赖多个软件包和库文件,采用逗号隔开 Pre-Depends 软件安装前必须安装、配置依赖性的软件包和库文件 常用于必须的预运行脚本需求 Recommends 推荐安装的其他软件包和库文件 Suggests 建议安装的其他软件包和库文件 preinst文件 在Deb包文件解包之前(即软件安装前),将会运行该脚本。可以停止作用于待升级软件包的服务,直到软件包安装或升级完成 postinst文件 负责完成安装包时的配置工作。如新安装或升级的软件重启服务 #软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行 #!/bin/sh echo "my deb" > /root/mydeb.log #!/bin/sh if [ "$1" = "configure" ]; then /Applications/MobileLog.app/MobileLog -install /bin/launchctl load -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist fi prerm文件 该脚本负责停止与软件包相关联的daemon服务。它在删除软件包关联文件之前执行 #!/bin/sh if [[ $1 == remove ]]; then /Applications/MobileLog.app/MobileLog -uninstall /bin/launchctl unload -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist fi postrm文件 负责修改软件包链接或文件关联,或删除由它创建的文件 #软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行 #!/bin/sh rm -rf /root/mydeb.log dpkg相关指令解析 #安装(解包并配置) dpkg -i|--install <.deb file name> #dpkg -i mydeb-1.deb #强制安装 dpkg --force-depends -i mydeb-1.deb #解包:该命令仅对 “mydeb-1.deb”进行解包操作,不会执行包配置工作 dpkg --unpack mydeb-1.deb #卸载:删除包,但保留配置文件 dpkg -r|--remove # dpkg -r my-deb #该命令删除包,且删除配置文件 dpkg -P|--purge my-deb #查看deb包是否安装/deb包的信息 dpkg -s|--status # dpkg -s my-deb #查看deb包文件内容 dpkg -c mydeb-1.deb #查看当前目录某个deb包的信息 dpkg --info mydeb-1.deb #解压deb中所要安装的文件 #第一个参数为所要解压的deb包,第二个参数为将deb包解压到指定的目录 dpkg -x mydeb-1.deb mydeb-1 #解压deb包中DEBIAN目录下的文件(至少包含control文件) dpkg -e mydeb-1.deb mydeb-1/DEBIAN #列出与该包关联的文件 dpkg -L|--listfiles dpkg -L my-deb #配置软件包 dpkg --configure # dpkg --configure my-deb #解压deb包中DEBIAN目录下的文件(至少包含control文件) dpkg -e mydeb-1.deb mydeb-1/DEBIAN #列出与该包关联的文件 dpkg -L|--listfiles dpkg -L my-deb #配置软件包 dpkg --configure # dpkg --configure my-deb =============================================================================== https://blog.csdn.net/weixin_40134955/article/details/108753274?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control linux下使用qt静态编译及打包程序完整教程(亲测可用) 概述         linux上qt程序开发好后会遇到一个问题,就是如何将开发好的程序打包成便于安装的安装包,然后发布给客户使用。这个过程总体可以分为两个步骤:编译和打包。经过测试,成功解决了这个问题,我将整个过程总结如下,既可以方便自己将来重复再花时间搭环境,也可以分享给有需要的人。         然而在此之前,我们先要解决一个qt程序的编译环境的问题。包含安装系统和安装qt 安装系统        首先我在vmware虚拟机上安装了一个ubuntu系统,系统版本是ubuntu16.04.6,不知道为什么我在ubuntu20.04上编译qt会出现各种错误,反正用16.04.6版本是没问题的。        链接:https://pan.baidu.com/s/1J-MDlVbEZw6nE2CrtNDACg 提取码:4ads 安装qt        然后我们需要安装qt。这时候有两种方法安装,使用两个虚拟机ubuntu分别用两种方法安装qt,一个用来开发并调试程序,一个用来最终编译生成要发布的程序,两种方法如下:        第一种方法是使用后缀为.run的安装文件直接安装,但是这样安装后的qt编译程序只能进行动态编译,即生成的可执行文件想要运行起来需要运行环境中有其所需要的动态库。我们总不能要求用户在使用我们的程序的时候还要自己安装动态库吧,因此我们在打包发布的时候就得把动态库都打包进安装包,这样的话,安装包就会非常大,一个简单的串口程序都有可能打包成好几十兆的安装包,如果不介意安装包比较大的话可以使用这种方法,安装步骤也非常简单,把所有选项勾选上,一直点下一步就行。这一个qt安装方法也有一个好处,那就是编译qt程序比较快,这样就方便我们在开发过程中进行调试。        第二种方法是使用qt的源码进行安装,配置安装qt的时候设置使用静态库,这样我们编译我们的qt程序的时候就可以静态编译了,打包成安装包的时候也不需要包含动态库了,安装包会比较小。        使用qt的源码安装的步骤如下: 1.下载qt源码包        qt5.9.2的源码包:        链接:https://pan.baidu.com/s/1W1hFWZCQSzGnR98ebbs49w 提取码:u65g        tar -xJvf qt-everywhere-opensource-src-5.9.2.tar.xz 2.更新相关软件        sudo apt-get install build-essential libgl1-mesa-dev libfreetype6-dev -y        sudo ln -s /usr/include/freetype2/freetype /usr/include/freetype        sudo apt-get install libfontconfig1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad libpulse-dev -y 3.配置编译选项(一定要等上一步执行完再执行这一步,否则会配置失败,如果配置失败,重新解压,重新配置) 3.1 新建目录/home/maoypeng/qtstatic 3.2 32位: ./configure -prefix /home/maoypeng/qtstatic -confirm-license -opensource -c++std c++11 -platform linux-g++-32 -release -static -qt-sqlite -fontconfig -gstreamer 1.0 -qt-zlib -qt-libpng -qt-libjpeg -qt-xcb -qt-xkbcommon-x11 3.3 64位: ./configure -prefix /home/maoypeng/qtstatic -confirm-license -opensource -c++std c++11 -platform linux-g++-64 -release -static -qt-sqlite -fontconfig -gstreamer 1.0 -qt-zlib -qt-libpng -qt-libjpeg -qt-xcb -qt-xkbcommon-x11 4.编译并安装 make make install 5.查看qt的qmake版本 5.1 配置环境变量 修改/home/你的名字/.profile文件,这是个隐藏文件(ls -a就会显示出来),在文末加入 QTDIR=/home/maoypeng/qtstatic PATH=$QTDIR/bin:$PATH MANPATH=$QTDIR/doc/man:$MANPATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTDIR PATH MANPATH LD_LIBRARY_PATH 5.2 更新修改 source /home/maoypeng/.profile 5.3 重启电脑后查看版本 qmake -v 编译qt程序 1.拷入已经用第一种方法动态编译好的qt工程 2.生成makefile文件, qmake test.pro 3.生成可执行文件, make        至此,静态编译完成,如果不需要打包成安装包的话,静态编译生成的可执行文件已经可以在相同CPU架构的其他机器上运行了。 打包成安装包 不同的linux发行版默认支持的安装包是不同的,所以打包方法也是不同的,我是用的系统是Ubuntu16.04 32位 1.安装linuxdeployqt 该工具的帮助文档:https://github.com/probonopd/linuxdeployqt/blob/master/README.md 有兴趣,可以自己看看。 下载linuxdeployqt 由于我使用的系统是32位的,因此不能使用https://github.com/probonopd/linuxdeployqt/releases中的64位可执行文件,因此需要直接下载源码来编译,当然,这种方法在64位的Ubuntu16.04上同样适用。由于从github下载较慢,因此我把源码保存到了百度网盘中方便下载。 链接:https://pan.baidu.com/s/1QJeANlAGFGRlUscMTan0wg 提取码:6z9q 编译linuxdeployqt 使用已经搭建好的静态编译环境来编译 $ tar -xzvf linuxdeployqt-7.tar $ cd linuxdeployqt-7 $ qmake linuxdeployqt.pro $ make 1 2 3 安装linuxdeployqt 将编译生成的可执行文件复制到/usr/local/bin目录,这样,我们就可以在其他目录访问了 $ cd bin $ sudo cp linuxdeployqt /usr/local/bin 1 测试是否安装成功 $ linuxdeployqt --version 输出版本信息,表示安装成功。 2.安装patchelf sudo apt-get intall patchelf 3.安装appimagetool 64位: $ sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool $ sudo chmod a+x /usr/local/bin/appimagetool 1 32位: $ sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-i686.AppImage" -O /usr/local/bin/appimagetool $ sudo chmod a+x /usr/local/bin/appimagetool 1 注:i686属于i386体系 4. Qt动态库路径设置到环境变量 如果程序是静态编译的,直接跳过该步骤。 工具会根据生成的可执行文件,自动搜索依赖,故我们需要确保Qt库的相关路径设置到环境变量中,这样工具在搜索时才能找到,并拷贝它们。 另外拷贝文件,对环境变量的使用,不想要重启系统那么麻烦,所以我们修改.bashrc文件,仅对当前用户永久有效。 $ vim ~/.bashrc 在.bashrc文件末尾,追加内容如下: export PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/bin:$PATH export LIB_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/lib:$LIB_PATH export PLUGIN_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/plugins:$PLUGIN_PATH export QML2_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/qml:$QML2_PATH 1 2 3 其中,/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/是本次测试环境Qt安装目录,大家根据自己的情况替换。 然后,使用source命令让文件立即生效。 $ source ~/.bashrc 然后,对环境变量测试下,是否设置正确。如下: $ qmake -v 5. 拷贝依赖文件 拷贝前,确认生成的是Release版本的程序,这个是常识。 我们在根目录下建立COMTransmit_setup目录,用于放置打包相关的文件; 并在COMTransmit_setup下继续建个COMTransmit目录,用来装COMTransmit应用及拷贝文件。 $ mkdir COMTransmit_setup $ cd COMTransmit_setup $ mkdir COMTransmit 1 2 把我们的应用COMTransmit拷贝到COMTransmit目录下 使用命令执行依赖文件拷贝 $ linuxdeployqt COMTransmit -appimage 终端报错,如下: 不用管它,是关于桌面文件的,后面我们直接编辑它。 一会后,/COMTransmit_setup/COMTransmit目录下,已经把依赖全部拷贝好了。 未完待续。。。 ———————————————— 版权声明:本文为CSDN博主「进击的蜗牛maoyp」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_40134955/article/details/108753274