ubuntu开发技巧总结

1、gdb使用方法

1. gdb a  进入gdb
2. run(r) 开始运行你的程序
2. start 开始执行程序
3. n 单步执行(next)
4. quit 退出gdb模式
5. b 8 在程序的第8行设置断点(8可以改成函数名,表示在函数处设置断点)b是break的缩写
6. c 继续执行(continue) 程序会在设置断点处停下来
7. display b 将b的值显示出来
8. i breakpoints 查看一共设置了几个断点(info信息)
9. delete 3(编号)  删除断点(有的断点行数不一样但地址却一样,有的地方不能够设置断点或者说与上一个设置的断点等效)
10. b 9 if a==2 设置断点在满足某个条件时才激活
11. r 表示从头开始运行程序
12. watch gdb的观察点(断点是当程序执行到某一代码行时中断,而观察点是当程序访问某个存储单元时中断,如果我们不知道某个存储单元是在哪里被改动的,这时候观察点尤其有用)例如:watch b (程序执行到b存储单元,将此执行单元执行前后的值都显示出来)
13. bt(查看崩溃在哪里)
段错误:如果程序运行时出现段错误,用gdb可以很容易定位到究竟哪一行引发额段错误。在gdb中运行,遇到段错误会自动停下来,这时可以用命令查看当前执行到哪一行代码了(gdb显示段错误出现在_IO_vfscanf函数中,用bt命令可以看到是哪一个函数调用了它)
14. gdb基本命令:
backtrace(bt) 查看各级函数调用及参数
finish 连续运行到当前函数返回为止,然后停下来等待命令
frame(f) 选择栈帧
info(i) locals 查看当前栈帧局部变量的值
list(l) 列出源代码,接着上次的位置往下列,每次列十行
list 行号 列出第几行开始的源代码
list 函数名 列出某个函数的源代码
next(n) 执行下一行语句
print(p) 打印表达式的值,通过表达式的值可以修改变量的值或者调用函数
quit(q) 退出gdb调试环境
set var 修改变量的值
start 开始执行程序,停在main函数第一行语句前面等待命令
step(s) 执行下一行语句,如果有函数则进入到函数中
break(b) 行号 在某一行设置断点
break 函数名 在某个函数开头设置断点
break(b)...if... 设置条件断点
detach 线程号 取消调试该线程
continue(c) 从当前位置开始连续运行程序
delete breakpoints 断点号 删掉此号的断点
display 变量名 跟踪查看某个变量,每次停下来都显示它的值
disable breakpoints 断点号 禁用此断点
enable 断点号  启用此断点
info(i) breakpoints 查看当前设置了哪些断点
run(r) 从头开始连续运行程序
undisplay 跟踪显示行号 取消跟踪显示
watch 设置观察点
info(i) watchpoints 查看当前设置了哪些观察点
5. info thread查看线程信息
6. gcc -g test.c -o test(记得一定要有-g,makefile中也要有-g)
7. b a.cpp:5 在a.cpp的第5行设置断点
(n:执行下一语句;c:执行到下个断点;s:执行下一行语句,如果有函数则进入到函数中)

2、linux命令

 虚拟机安装软件,将动态库复制到虚拟机内,而不是放到共享软件上

1. Ctrl+Alt+T  进入终端
2. /mnt/hgfs/share 文件共享目录
3. yum install ..(需要有该文件)
   apt-get install ..(系统从默认路径下载/)
4. sudo find / -name libQtCore.so.4
5. cd -  返回上一次目录
6. 退出root用户 exit
7. 不知道函数应该包含哪个库,用man * 来查询
8. grep全称是Global Regular Expression Print,表示全局正则表达式版本(强大的文本搜索工具,使用正则表达式搜索文本,并把匹配的行打印出来)
9. tar一般都是源码打包的软件,需要自己解包,然后进行安装三部曲,./configure, make, make install. 来安装软件
10.ps查看哪些进程在运行(root和yangfang)
11. kill -9 ID 杀死进程
12. 新安装的ubuntu启动root权限
13. cp -r dir1/. dir2 将一个文件夹中的东西全部复制到另一个文件夹中
14.tar -zxvf *.tar.gz 解压缩该文件
15.cat /etc/issue查看ubuntu系统是哪个版本

3、 makefile的撰写方法

 参考(https://blog.csdn.net/haoel/article/details/2886/)

 4、qt安装

问题一:linux找不到动态链接库 QtCore.so文件的解决方法:
    
  方法一:修改LD_LIBRARY_PATH环境变量。
    这种方法主要处理临时的动态库加载,LD_LIBRARY_PATH环境变量修改后,只能是对当前的用户生效。LD_LIBRARY_PATH的作用:这个环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。
    具体步骤:
    1、找到动态库所在路径:sudo find / -name "[动态库名字]"
    2、打开~/.bashrc文件
    3、在该文件最后一趟添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[动态库所在的绝对路径]
    4、source ~/.bashrc
 方法二:修改/etc/ld.so.conf配置文件
    特点:对所有用户生效。不是每个操作系统都有这个配置文件,就Ubuntu系统有。
    /etc/ld.so.conf的作用:记录了程序加载运行期间查找动态链接库时的路径。
    具体步骤:
    1、找到动态库所在路径:sudo find / -name "[动态库名字]"  libQtCore.s0
    2、打开/etc/ld.so.conf文件:sudo vi /etc/ld.so.conf
    3、在最后一行添加动态库的绝对路径
    4、重新加载/etc/ld.so.conf文件:sudo ldconfig -v
 方法三:创建动态库的软连接(推荐)
    特点:让所有用户生效;并且通用,只要是Linux类型的操作系统,都会去/usr/lib目录下去找动态库
    具体步骤:
    1、找到动态库所在路径:sudo find / -name "[动态库名字]" 
    2、创建动态库软连接:ln -s [动态库] [待创建的软链接] 注意:1、创建软连接的时候要用绝对路径,如果用相对路径,会导致只在当前路径有效,其他路径这个软连接就找不到了。2、不建议用cp的方式代替ln-s的方式。原因:当动态库升级的时候,有可能导致动态库版本不一致,还是链接的旧版本。
 方法四:
    若动态库不存在,则需安装 sudo apt-get intstall libxxx-dev(libQtCore-dev)
    
问题二:”warnning被当做error对待“解决办法:
     方法一: 将对应目录下的Makefile.WebKit文件中的-Werror去掉
     方法二:https://blog.csdn.net/loongkingwhat/article/details/82468388(可尝试)


(参考博客https://www.cnblogs.com/findumars/p/6283448.html)

注意:将压缩包复制到linux虚拟机中,然后在虚拟机中解压缩,在解压缩后的安装包中./configure
零、清除配置:
make confclean 
./configure重新配置

一、配置 ./configure -force-pkg-config
1.若报"Disabling video due the lack of GLib/Gio/GStreamer."错:在Qt 的configure 时加上-force-pkg-config, 否则会在WebCore的feature.pri中检查
2.编译webkit时,出现Project MESSAGE: Disabling video due the lack of GLib/Gio/GStreamer等与GStreamer相关的错误,此时需要安装相关的dev包,如:libgstreamer-plugins-base0.10-dev、libgstreamer0.10-dev
二、编译
make (make -j3)N项编译,使用多核,加快编译 

三、安装(安装目录:/usr/local/Trolltech/Qt-4.8.0/lib)(/usr/lib/x86_64-linux-gnu/qt4/bin
/usr/lib/x86_64-linux-gnu
)
make install 

安装qtcreator
一、跳过注册用户
二、安装目录:/opt/qtcreator-4.8.0

libQt5Concurrent.so.5

 5、qt工程编译和运行

1.删掉:Debug、GeneratedFiles、Release、Win32、x64和文件...user、...sln、...vcxproj、......filters
2.只保留:.h、.cpp、.qrc(没有这个文件编译出来的Qt项目会显示不了图片)、.ui文件和Resources目录
3..pro文件文件目的是为了实现跨平台,内容都是配置信息,例如指明头文件所在,库文件所在,库文件名,目标文件名等等。INCLUDEPATH和LIBS
4.移植后,warning:null character(s) ignored,error:stray '\22' '\23' '\177' in program
解决办法:用记事本将文件打开,以ANSI/UTF-8保存
5. time.h重定义,直接#include

1.qmake -project(QT4可以,QT5不可以) 执行完目录会生成xxx.pro文件
2.qmake 执行完目录下会生出Makefile文件
3.make 执行完这一步在目录下会生成可执行文件,运行即可


https://blog.csdn.net/u014552102/article/details/81055865

在makefile中添加动态库:
-L/mnt/hgfs/share/playerdll/ParsePS -lParsePs -L/mnt/hgfs/share/playerdll/DycHikSingleThreadDecode_3.4.2.8_linux64_base_20190919 -lDycHikSingleThreadDecode -L/mnt/hgfs/share/playerdll/libsuperRender_linux64 -lSuperRender
动态库拷贝到/usr/lib
libParsePs.so libsuperRender.so libdecoder.so


替换库(改变库的来源):
ubuntu16.04 - xenial 
ubuntu15.10 - willy
ubuntu14.04 - trusty
ubuntu12.04 - precise

deb-src http://archive.ubuntu.com/ubuntu trusty main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ trusty universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates universe
deb http://mirrors.aliyun.com/ubuntu/ trusty multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu trusty partner
deb-src http://archive.canonical.com/ubuntu trusty partner
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ trusty-security universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-security multiverse


deb http://mirrors.163.com/ubuntu/ trusty main restricted
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted
deb http://mirrors.163.com/ubuntu/ trusty universe
deb-src http://mirrors.163.com/ubuntu/ trusty universe
deb http://mirrors.163.com/ubuntu/ trusty-updates universe
deb-src http://mirrors.163.com/ubuntu/ trusty-updates universe
deb http://mirrors.163.com/ubuntu/ trusty multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty multiverse
deb http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-security main restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted
deb http://mirrors.163.com/ubuntu/ precise-security universe
deb-src http://mirrors.163.com/ubuntu/ precise-security universe
deb http://mirrors.163.com/ubuntu/ precise-security multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-security multiverse
deb http://extras.ubuntu.com/ubuntu precise main
deb-src http://extras.ubuntu.com/ubuntu precise main

6、安装VMware

1.虚拟机设置:共享文件夹->添加
2.安装VMware-tools 设置->重新安装VMware-tools,在linux中找到压缩包->复制到其他目录解压缩后->执行vmware.pl一路yes,(不要默认的选项,看清提示)

7、 黑屏问题

mount -o remount,rw /
vi /etc/modprobe.d/blacklist.conf

最后重装了系统(VMware15.5.1,ubuntu14.04,win10),网上有说VMware15.0.0和最新的win10不兼容(画面不能放大,最后黑屏)

 8、生产动态库方法

1. g++ hello.c -fPIC -c -o hello.o   //-c只编译(生成中间同名目标文件,不链接)-o指定输出文件名,该文件为可执行文件,不加-o会默认生成.out
2. g++ hello.o -shared -o libmyhello.so

gcc -fPIC -shared -o libNAME.so file1.c file2.c


g++ hello.c -c  编译生成hello.out文件 
g++ hello.c -o hello  生成可执行文件hello
-g 表示生成的文件是可调试的,如果没有-g,调试时无法命中断点

9、新添加的库在cmake中

-L/mnt/hgfs/share/playerdll/ParsePS -lParsePs -L/mnt/hgfs/share/playerdll/DycHikSingleThreadDecode_3.4.2.8_linux64_base_20190919 -lDycHikSingleThreadDecode -L/mnt/hgfs/share/playerdll/libsuperRender_linux64 -lSuperRender

10、移植中遇到的问题

 1. vs中的.cpp只能是unicode
linux下不能为unicode,ANSI和UTF-8

你可能感兴趣的:(ubuntu,linux,运维)