Linux——环境基础开发工具的使用(2)

简介: Linux——环境基础开发工具的使用(2)

6.vim的配置

       新用户在使用vim编写代码时并不像在VS下有自动缩进、自动补齐、代码提示、语法高亮等;下图是我们自己手动缩进的,这里也并没有行号;

1ecd1b2606ed46e9956a89f231c9802c.png

①配置文件的位置

1.在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

2.而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。

3.切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~

4.打开自己目录下的.vimrc文件,执行 vim .vimrc  

②vim配置方法

1.采用手动配置:在普通用户下创建一个.vimrc文件,执行vim . vimrc ,例如:设置行号(set nu)、设置语法高亮(syntax on);保存并退出,简单测试一下 vim test.c 此时行号和语法高亮都能正常显示。虽然可行,但是不推荐这样做,我们可以采用第二种做法;


2.vim的配置相对比较复杂,某些配置还需要使用到插件,我们可以直接执行下面的代码,


curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh


需要输入root密码,等待片刻后,手动执行source ~/.bashrc即可;

1ecd1b2606ed46e9956a89f231c9802c.png

最后就可以看到和VS差不多的功能了

1ecd1b2606ed46e9956a89f231c9802c.png

三、Linux编辑器 — gcc/g++的使用

1.gcc和g++的使用

       在Linux中,gcc是C的编译器,g++是C++的编译器;一个程序能够执行起来,一般需要经过四个步骤:预处理、编译、汇编和链接。以下图程序为例,对这四个阶段进行在Linux中的操作进行介绍。

#include <stdio.h>
#define NUM  100                                                                                      
int main()
{
   printf("hello vim\n");
   //printf("hello vim\n");
   //printf("hello vim\n");
   //printf("hello vim\n");
   //printf("hello vim\n");
   printf("hello vim\n");
   printf("NUM = %d\n",NUM);
   return 0;
}

1.预处理

     在预处理阶段主要负责的是头文件的展开、去掉注释、宏替换、条件编译等。以#号开头的是预处理指令:#define #if #include......此阶段产生【.i文件】

       在Linux中,如果想要看到预处理后的结果,可以执行下面的指令:

[mlg@VM-20-8-centos lesson1]$ gcc -E mytest.c -o test.i

-E:只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面(xx.i文件)

-o:文件输出到文件(将mytest.c文件输出到test.i文件)

1ecd1b2606ed46e9956a89f231c9802c.png

2.编译

     此阶段完成语法和语义分析,然后生成中间代码,此中间代码是汇编代码,但是还不可执行,gcc编译的中间文件是[.s]文件。在此阶段会出现各种语法和语义错误,特别要小心未定义的行为,这往往是致命的错误。


       在Linux中,当预处理完生成了test.i文件后,想看到编译产生的汇编代码,可以执行下面的指令:

[mlg@VM-20-8-centos lesson1]$ gcc -S test.i -o test.s

-S:编译到汇编语言不进行汇编和链接

-o:文件输出到文件

1ecd1b2606ed46e9956a89f231c9802c.png

3.汇编

     此阶段主要完成将汇编代码翻译成机器码指令,并将这些指令打包形成可重定位的目标文件,[.o]文件,是二进制文件。此阶段由汇编器完成。

在Linux下,可以执行下面这个指令:

[mlg@VM-20-8-centos lesson1]$ gcc -c test.s -o test.o

-c:编译到目标代码

-o:文件输出到文件

image.png

4.链接

 此阶段完成文件中叼用的各种函数跟静态库和动态库的连接,并将它们一起打包合并形成目标文件,即可执行文件。此阶段由链接器完成。
[mlg@VM-20-8-centos lesson1]$ gcc test.o -o test

image.png

2.静态库与动态库

静态库:

       一般扩展名为(.a或.lib)

       静态库在编译的时候会直接整合到目标程序中(理解为拷贝),所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译。

动态库:

       动态函数库的扩展名一般为(.so或.dll)

       与静态库被整个整合到程序中不同,动态库在编译的时候,在程序里只有一个“指向”的位置而已,也就是说当可执行文件需要使用到函数库的机制时,程序才会去读取函数库来使用;也就是说可执行文件无法单独运行。这样从产品功能升级角度方便升级,只要替换对应动态库即可,不必重新编译整个可执行文件。

1.静态链接与动态链接的区别

一般gcc和g++默认都采用的是动态链接


       静态链接的过程就已经把要链接的内容已经链接到了生成的可执行文件中,就算你在去把静态库删除也不会影响可执行程序的执行;


       动态链接这个过程却没有把内容链接进去,而是在执行的过程中,再去找要链接的内容,生成的可执行文件中并没有要链接的内容,所以当你删除动态库时,可执行程序就不能运行。


       所以总的来说,动态链接生成的可执行文件要比静态链接生成的文件要小一些。

1ecd1b2606ed46e9956a89f231c9802c.png

2020062310470442.png

2.如何实现静态链接(含安装)

我们可以执行这样的指令:

[mlg@VM-20-8-centos lesson1]$ gcc mytest.c -o test1 -static

       如果出现这种情况的报错,是因为在新版本的linux 系统下安装 glibc-devel、glibc和gcc-c++时,都不会安装libc.a. 只安装libc.so. 所以当使用-static时,libc.a不能使用。只能报找不到libc了。

/usr/bin/ld: cannot find -lc
安装glibc-static
sudo yum install glibc-static

3. gcc/g++常用选项

image.png

四、Linux编辑器 — gdb的使用

1.gdb的基本概念

 Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况。


1.程序的发布方式有两种,debug模式和release模式

       debug模式:只有在debug下才可以进行调试,因为该模式下加入了debug调试信息;

       release模式:去掉了这些调试信息,是不可以被调试的

2.Linux下gcc/g++出来的二进制程序, 默认是release模式

3.要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

1ecd1b2606ed46e9956a89f231c9802c.png

从上图中可以发现debug版本和release版本下生成的可执行程序,文件大小是不一样的,也正说明了debug确实加入了一些调试信息

2. gdb指令

1.常用指令汇总

image.png

2.指令操作演示

通过下面的代码来演示Linux下调试的技巧

#include <stdio.h>
int fun(int p)
{
  int i = 0;
  int sum = 0;
  for(i = 0;i <= p;i++)
  {
    sum += i;
  }
  return sum;
}
int main()
{
  int x = 100;
  int ret = 0;
  ret = fun(x);
  printf("ret = %d\n",ret);
  return 0;
}

查看源代码 —— list 行号 和 list 函数名,可简写为 l 行号 和 l 函数名

1ecd1b2606ed46e9956a89f231c9802c.png

2020062310470442.png

调试程序:runnextstep配合断点相关的指令

1ecd1b2606ed46e9956a89f231c9802c.png

2020062310470442.png

finishcontinueuntil的区别

在函数执行过程中,finish是用来结束当前函数

1ecd1b2606ed46e9956a89f231c9802c.png

在函数执行过程中,continue是用来直接到达下一个断点(在有断点的情况下)

2020062310470442.png

until是用来跳转值某一行的

1ecd1b2606ed46e9956a89f231c9802c.png

查看变量:print、display 以及undisplay

1ecd1b2606ed46e9956a89f231c9802c.png

退出调试是quit,可简写为q


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
1天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
28天前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
34 4
|
2月前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
420 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
95 3
|
1月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
45 3
|
2月前
|
Ubuntu 应用服务中间件 Linux
Linux下搭建Nginx环境的搭建
Linux下搭建Nginx环境的搭建
72 6
|
1月前
|
Linux UED iOS开发
|
2月前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
55 3
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
507 3
|
2月前
|
Unix Linux Go
Linux 使用Yum安装Go和配置环境
Linux 使用Yum安装Go和配置环境
下一篇
DataWorks