Linux & Qt 碎碎念

12 篇文章 1 订阅
3 篇文章 0 订阅

Linux碎碎念

目录

Linux碎碎念

前言

一、搭建Ubuntu平台

二、VNC部分搭建

三、Makefile文件

四、Qt相关

1.在Linux上无法双击执行直接编好的程序。

2.代码块使用

3.操作office在linux上和Win上的不同

4.Linux中库读取和环境变量设置

5.程序打包

6.运行时无法确定具体哪个库缺少

总结


前言

由于软件平台的需求,在八月底到九月底一个月完成了Linux下Ubuntu的程序的编译,以下对最近遇到的一些问题做个大概的复盘,旨在为接下来写更加细化的操作列一个大纲。

一、搭建Ubuntu平台

搭建Ubuntu平台,最初始版本是在虚拟机上进行操作,安装了需要使用的Qt和Gcc,打算使用QtCreator作为Qt程序的IDE,使用Gcc作为编译工具。

安装Qt可直接在官网上进行下载run包进行安装。具体的网址可参照百度进行搜索,这里需要提的是现在的镜像网址中间缺失了4.*和5.*的部分版本,需要下载其中缺失版本的可移步至http://download.qt.io/new_archive/qt/ 。

安装Gcc可使用终端进行安装,简单快捷,sudo apt-get install build-essential,具体某一个Linux系统的不同版本安装软件方法依旧可参考度娘。

二、VNC部分搭建

搭建好工具运行平台之后,由于有需要桌面远程控制的需求,因此需要安装VNC,VNC安装时需要安装X11桌面进行支持,据说会更好进行支持桌面控制,在虚拟机上使用Ubuntu时若要使用VNC进行控制,VMware虚拟机默认设置中默认不能进行VNC控制,在设置中需要将其开启。

可在被控制的Ubuntu系统内安装好VNC Server后,使用命令进行启动,在要控制的机器上使用VNC View进行控制。注:在Ubuntu中可以在应用商店中安装VNC,但是需要有网络进行支持,登录同一个账户,使用云进行控制,这种情况不适用于使用局域网的情况(PS:我大概是这么理解的,如有错误欢迎指正)。VNC的默认端口号是5900,之后启动一个服务依次端口号+1, 5901 5902

三、Makefile文件

使用Makefile文件进行C++库的编译,具体Makefile文件的编写需要专门写一篇文章才能将其最基础的使用描述清楚,在此不做详述。在此留坑,以后来补。

四、Qt相关

1.在Linux上无法双击执行直接编好的程序。

在Linux Qt下编写可执行程序需要在pro文件中添加 QMAKE_LFLAGS += -no-pie,这样的才变为可执行程序,否则默认为库的类型。

2.代码块使用

在Pro文件中用到了一个代码块,用来屏蔽Release版本中输出的调试信息qDebug()输出的信息。

pro文件中代码块的使用
<condition>{ //括号与条件在同一行
//ToDo
} //结尾括号单独列出

eg:
CONFIG(release,debug|release){
DEFINES += QT_NO_DEBUG_OUTPUT
}

 

3.操作office在linux上和Win上的不同

操作Word和Excel等接口在windows上Qt封装了COM接口进行使用,需要在组件中加入axcontainer,在Linux上无此组件,由于本程序需要操作表格,因此可写入csv文件进行保存,默认用表格打开。在Linux上比较官方的办法可采用wps上关于Linux的接口,libreOffice的官方接口进行使用,但由于时间紧迫,该方法未能深入研究。

4.Linux中库读取和环境变量设置

首先需要清楚的是gcc编译时读库文件的顺序。

1.在程序指定的-L 的目录下读取需要的库文件。(编译时默认不查找当前目录,需要使用-L ./进行指定)

2.寻找gcc的环境变量LIBRARY_PATH

3.寻找内定目录

  • /lib和/lib64
  • /usr/lib 和/usr/lib64
  • /usr/local/lib和/usr/local/lib64

其次需要了解运行时动态库的搜索路径顺序

1. 编译目标代码时指定的动态库的搜索路径。gcc -wl -rpath-指定,多个使用:进行分隔。

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径

3.配置文件/etc/ld.so.conf指定的动态库的搜索路径

4.默认的动态库搜索路径/lib ,/usr/lib

注:

1.Linux与Win不同的点在于并不搜索同一路径下的so文件,因此将其文件即使放在同一目录也可能无法运行。

2.通过终端进行环境变量的修改用于临时情况使用export 仅对该终端起作用,打开其他终端时依旧无法起作用。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/usr/libpath

3. 对于当前用户进行环境变量的修改。

在.bashrc中设置或者在./bash_profile设置,对当前用户生效。修改后需要source ~/.bashrc,可以立即生效,否则为重启后生效。

对所有用户进行修改,在/etc/profile中设置或在/etc/profile.d/中创建一个自定义的脚本。

5.程序打包

程序打包之后需要在纯净的Ubuntu环境中进行使用。

打包Qt程序可使用linuxdeployqt进行打包,也可使用shell脚本对相关需要的库进行添加,注意有的库拷贝进去的只是软连接,需要使用ldd去查看真正依赖的库,把真正所指的库复制到相关目录下,有时需要重命名。

例如要打包的程序名称为DIDS,该脚本名称为copylib.sh 首先运行该脚本。

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

该脚本名称设为要运行 DIDS.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 "$@"

6.运行时无法确定具体哪个库缺少

在运行程序后可能会出现xcd插件无法找到,但是又不确定到底是哪一个库没找到,可在DIDS.sh中添加如下语句。

export export QT_DEBUG_PLUGINS=1

 


总结

对后续留坑以及最近的大概梳理

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值