- 自行查找资料, 调研除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点.
1.Sublime Text
2.Atom
3.Notepad++
4. Emacs
5. Brackets
6. UltraEdit
十年来最为出色的文本编辑器。
闭源项目,提供免费评估版本,完整版本价格为79.95美元起。
多符号编辑、列/块编辑、多重选择(多光标)、可深度定制的菜单系统、强大的正则表达式搜索与详尽的过滤器与搜索选项、集成FTP浏览器、数百种语言语法高亮显示、可编辑大文件(超过4 GB)。
跨平台,支持OS X、Windows及Linux。
7.Komodo Edit
8.BBEdit
9.TextMate:
将苹果操作系统中的方案引入文本编辑器领域。
开源项目,可免费使用且遵循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
.