就当做资料整理吧,编译器,编辑器,-g,等

- 自行查找资料, 调研除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点.

 

1.Sublime Text

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

2.Atom

0?wx_fmt=jpeg

3.Notepad++

0?wx_fmt=jpeg

4. Emacs

0?wx_fmt=jpeg

5. Brackets

0?wx_fmt=jpeg

6. UltraEdit

0?wx_fmt=jpeg

十年来最为出色的文本编辑器。

闭源项目,提供免费评估版本,完整版本价格为79.95美元起。

多符号编辑、列/块编辑、多重选择(多光标)、可深度定制的菜单系统、强大的正则表达式搜索与详尽的过滤器与搜索选项、集成FTP浏览器、数百种语言语法高亮显示、可编辑大文件(超过4 GB)。

跨平台,支持OS X、Windows及Linux。

7.Komodo Edit

0?wx_fmt=jpeg

8.BBEdit

0?wx_fmt=jpeg

9.TextMate:

0?wx_fmt=jpeg

将苹果操作系统中的方案引入文本编辑器领域。

开源项目,可免费使用且遵循GPLv3许可。

项目内搜索与替换、剪贴板历史、多文件动态概述、可折叠代码块、正则表达式搜索与替换(grep)、支持超过50种语言、支持陈述性语言语法以实现混合及修改、主题化语法高亮着色等。

仅兼容OS X。

 

原文链接:http://cloud.51cto.com/art/201701/528506.htm#topx

 

- 自行查找资料, 调研除了gcc, 还有哪些常用的牛逼的编译器(不限制编程语言, 不限制平台).

 

Viual C++

Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)

Borland C++

这是由Borland公司出品。该公司的编译器以速度快、占用空间少著称。Borland C++ Builder和Borland C++ Builder X这两种开发工具用的就是这个编译器。

GNU C++
这是GNU项目里面的著名开源编译器,是类UNIX系统下编写C++首先的编译器。其特点是可移植性好,可以在广泛的平台上使用它,是跨平台嵌入式系统开发的首选。在兼容性方面,GCC3.3达到了96.15%。

Inter C++

它是针对Intel x86体系结构的CPU特别优化定制的,换句话说就是,它是基于Intel的处理器内核而开发的。此编译器对于高性能数值运算这种环境下的优势很明显,可以不优化代码的情况下就能提升程序的性能。

Clang

Clang是一个C语言、C++、Objective-C、Objective-C++语言的轻量级编译器。源代码发布于BSD协议下。Clang的优势有:

编译速度很快,相当于GCC的1/3 ~1/4
编译过程消耗的内存不大
中间产出物和最终链接产物也不大,相当于GCC的1/3~1/4
出错信息可读性更强
代码结构清晰,可以作为库使用,成为其它 app(主要是 IDE)的内嵌 C/C++ parser

现在主流或者说是常见的编译器有四种:
1、Visual C++:这可能是大家用的最多的。不用说也知道是微软家的。Visual C++ 6.0可能是学C++的人最熟悉不过的了,不过6.0出来的时候,它的编译器对C++标准的兼容性比较低,只有70%左右。当然,这有其历史原因,Visual C++6.0出生的时候,C++标准还没出来呢~。Visual C++编译器发展到现在对C++标准的兼容性已经很好了,可以达到98%左右。

2、Borland C++:这是由Borland公司出品。该公司的编译器以速度快、占用空间少著称。Borland C++ Builder和Borland C++ Builder X这两种开发工具用的就是这个编译器。

3、GNU C++:又名GCC。这是GNU项目里面的著名开源编译器,是类UNIX系统下编写C++首先的编译器。其特点是可移植性好,可以在广泛的平台上使用它,是跨平台嵌入式系统开发的首选。在兼容性方面,GCC3.3达到了96.15%。

4、Intel C++:从名字就可以知道此编译器的主人了。它是针对Intel x86体系结构的CPU特别优化定制的,换句话说就是,它是基于Intel的处理器内核而开发的。此编译器对于高性能数值运算这种环境下的优势很明显,可以不优化代码的情况下就能提升程序的性能。
--------------------- 
作者:奄奄不息 

原文链接:https://blog.csdn.net/qq_41209741/article/details/82882248

为什么调试的时候需要编译选项中添加 -g
默认编译生成的可执行文件是无法使用 gdb 来跟踪或调试的,因为可执行程序中没有可供 gdb 调试使用的特殊信息,为了将必要的调试信息整合到可执行文件中,我们便需要用到 -g 选项,这样生成的可执行程序,倘若出现问题,便可以使用 gdb 找出问题具体出现的位置,便于问题的解决。

加上-g选项以后,gcc在编译是会做以下额外的操作:

创建符号表,符号表包含了程序中使用的变量名称的列表。

关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行。

调研readelf命令
readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。 

这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。 

运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。 

ELF文件有下面三种类型:
1.目标文件

$ gcc -c test.c
得到的test.o就是目标文件,目标文件通过链接可生成可执行文件。
静态库其实也算目标文件,静态库是通过ar命令将目标打包为.a文件。
如:ar crv libtest.a test.o

2.可执行文件
$gcc -o test test.c
得到的test文件就是可执行的二进制文件。

3.共享库
$ gcc test.c -fPIC -shared -o libtest.so
得到的文件listtest.so就是共享库。

我们以可执行文件为例来分析一下readelf命令。

gcc -o test test.c

生成可执行文件test。

readelf -h test

下面是输出结果:

1.根据Class、Type和Machine,可以知道该文件在x86-32位机器上生成的32位可执行文件。
2.根据Entry point address,可以知道当该程序启动时从虚拟地址 0x8048300处开始运行。这个地址并不是main函数的地址,而是_start函数的地址,_start由链接器创建,_start是为了初始化程序。通过这个命令可以看到_start函数,objdump -d -j .text test
3.根据Number of program headers,可以知道该程序有8个段。
4.根据Number of section headers,可以知道该程序有30个区。
区中存储的信息是用来链接使用的,主要包括:程序代码、程序数据(变量)、重定向信息等。比如:Code section保存的是代码,data section保存的是初始化或未初始化的数据,等等。

Linux内核无法以区的概念来识别可执行文件。内核使用包括连续页的VMA(virtual memory area)来识别进程。在每个VMA中可能映射了一个或多个区。每个VMA代表一个ELF文件的段。
那么,内核如何知道哪个区属于某个VMA(段)?映射关系保存在Program Header Table(PHT)中。

下面查看区的内容,

readelf -S test

.text区存储的是程序的代码(二进制指令),该区的标志为X表示可执行。

下面一些指令有兴趣的可以尝试一下,因为个人比较懒,就不每个都配截图了。

使用objdump反汇编查看.text的内容:
$objdump -d -j .text test
-d选项告诉objdump反汇编机器码,-j选项告诉objdump只关心.text区。

使用objdump反汇编查看.data的内容:
$objdump -d -j .data test
.data区保存的是初始化的全局变量。 

 

 使用objdump反汇编查看.bss的内容:
$objdump -d -j .bss test
.bss区保存的是未初始化的全局变量,linux会默认将未初始化的变量置为0。

 

下面命令可以看到test文件中所有的符号:
$readelf -s test
Value的值是符号的地址。 

 下面命令来查看文件的段信息:
$readelf -l test
区到段的映射,基本上是按照区的顺序进行映射。
如果Flags为R和E,表示该段可读和可执行。
如果Flags为W,表示该段可写。
VirtAddr是每个段的虚拟起始地址。这个地址并不是位于真正内存上的地址(物理地址)。 --------------------- 本文来自 Read_ever 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/linux_ever/article/details/78210089?utm_source=copy

在Linux下实现进度条程序. 通过makefile进行编译. 建议自主完成一个彩色的进度条. 


输入make

再输入./proc

可以看到进度条:

调研Linux下软件安装的几种方式(源码安装, rpm安装, yum安装)
下面这位高手的博客里有软件安装的具体过程。

https://blog.csdn.net/u012501054/article/details/77880139

1.源码安装。源码安装的步骤:编译源码,然后安装。
<1>安装准备

a.首先用yum安装gcc,用于编译源码

b.官网下载源码包

c.winSCP  windows与linux传输文件(如果直接用要安装的linnux电脑下载就不用传输了)

<2>安装过程

解压
进入解压后的目录配置软件 ./configure#大多数情况下源码包都会带configure这样一个配置工具,具体使用方法可以vim查看其内容 。
make #编译源码包,如果报错了make clean清除缓存重新make
make install #安装,然后删除源码包软件和安装目录。
<3>源码安装优点

文档齐全
因为可以定位到代码,所以debug方便
本机兼容性最好(由于是本机编译的,只要编译通过,就没有各种库的依赖的问题)
<4>源码安装缺点

编译比较麻烦
缺乏自动依赖管理,软件升级麻烦
2. rpm安装
rpm安装就是:安装别人编译好的软件包。如果依赖的文件没有事先安装,软件无法安装成功。

rpm即Redhat Package Manager,Redhat的软件包管理方式,适用于rpm install命令。rpm不仅已经把软件源代码编译成二进制文件,而且还对软件包依赖的软件,系统环境等做了统计。文件扩展名:rpm。还有一种SRPM:没有编译成二进制文件,但是也包含rpm的特性。

3.yum安装
为了解决rpm的问题,推出yum方式。既然依赖的软件没有安装在机器上,那么就先安装依赖的文件,再安装需要安装的软件。因此yum在安装软件同时安装依赖软件。因此需要一个yum源来放依赖的软文件,对比被安装机器上rpm软件库。yum也是基于rpm的。

作者:奄奄不息 
来源:CSDN 

链接:https://blog.csdn.net/qq_41209741/article/details/82882248

.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值