linux基础2


1.除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点. 

1.gedit

   gedit无需多言,Linux各个发行版默认都有的编辑器,类似于Windows的记事本,不过可以根据代码类型着色,这点可比记事本牛逼多了,不过我一直没有搜索到如何配置gedit才能让他显示行号和改变tab为4个空格,所以不是迫不得已不会用gedit编辑正式文件。

2.Light Table

Light Table是一个免费开放源代码的编辑器,该编辑器有一个非常干净的界面,并有大量扩展。它与Windows、Mac和Linux都兼容,是高度可定制的。使用Light Table,开发者只需打开一个浏览器窗口即可实时查看更改,并且支持不同的嵌入。

3.Eclipse

   Eclipse是一款很酷的开源代码编辑器,同时它也是最受程序员亲睐的代码编辑器之一,它拥有代码高亮和智能提示等强大的功能。在Eclipse中,你可以完全胜任以下编程语言的工作—&mdash、ython, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等,它也是非常著名的Java集成开发环境,甚至提供了对Java 8的支持。在一些Web开发IDE特性的帮助下,你可以非常方便地对代码文件进行组织和访问。

4.Notepad++

    Notepad++有很好的理由成为许多WordPress开发人员的首选。这个轻量级的代码编辑器是开源的,可以*使用。该编辑器最好的一点是,它是新手和专家的理想选择。支持的的语言列表包括WordPress开发人员在开发复杂项目过程中所需的一切。Notepad++的其他功能包括:重点语法突出 ·支持FTP ·外部插件 ·跨平台兼容性 ·代码和文本折叠 ·编译器集成

5.Emacs
        有句夸张的话说:Emacs是伪装成编辑器的操作系统。细细想来,这句话并不夸张。
        Emacs其实是个Lisp的解释器,因此可以用Lisp灵活地扩展。 Lisp是什么东西,这同样是种很有生命力的编程语言。在C语言还没有发明的年代,MIT的人工智能实验室写ITS操作系统时,一部分用的是汇编语言,还有一部分就是用的Lisp。现在,Lisp仍在人工智能研究领域广泛使用着。
        有这么牛逼的扩展语言,注定Emacs向着无所不能的方向发展。渐渐地,人们用Emacs不再限于写程序,写文档,而且在Emacs里管理文件系统,运行终端,收邮件,上网,听音乐……,真是一发不可收拾。甚至,有人用Emacs控制咖啡机煮咖啡。
        这种大而全的扩展,背离了“一个程序只做一件事并做好它”的 Unix哲学,被Unix的忠诚用户所诟病。可是真的背离了吗? Emacs说过自己是一个编辑器吗?

        正是因为Emacs的无敌的可扩展性,人们才分不清Emacs到底是不是一个编辑器了。但,就是有人喜欢这种All-in-One的哲学,喜欢在Emacs中完成每件事。所以才会有人写《生活在Emacs中》,所以, Emacs才会成为一种信仰.

 

2.除了gcc, 还有哪些常用的牛逼的编译器

 

MSVC

    Windows平台上最常用的编译器,在C++编译器圣战中的胜利者,一个常被人诟病的是对标准的支持不够新不够快(最近开始逐步加快了)。随着微软发布基于Clang / C2,这一条路以后若成功,MSVC与Clang / C2并行,甚至逐步逐步退出舞台,都是有可能的事情。

Clang

    重点介绍。licence极度友好,代码质量非常棒,采用的IR为LLVM IR非常优秀,各大公司逐步发力在Clang上,包括不限于微软,IBM,Nvidia等,各大公司也在开始疯狂的往Clang / LLVM交代码(圈地),也开始往Clang实现OpenMP,Nvidia GPU等支持,目前在赶超GCC的道路上一路激情的狂奔,前途一片光明。但是Clang依赖于的LLVM,目前的性能无法与GCC相提辩论,在Benchmark性能测试上几乎没有胜利的项目,优化的道路上任重道远,同时一些开源软件没有办法编译过去,主要是缺乏对GCC 一些Builtin函数、自身带的汇编器的孱弱导致。

GCC/G++

    跨体系结构很多,很多开源软件默认编译器都是GCC/G++,这一点上Clang比不上。

ICC    

    没有自己专门的前端(传说中的外包),而且是针对Intel体系结构上专门优化。

IBM XL C++

    在IBM特定硬件与平台上表现非常牛逼,Benchmark性能测试非常优秀,其最初的设计思想就是为了性能,其最高优化级别可以达到O5,带来的缺点则是在编译时间上往往过长。而另外一个常被人诟病的是对C++标准的支持、开源软件的支持、错误信息的提示上都不够友好,然而从13.2开始,随着IBM采用Clang融合方案,目前这几项都得到有效改良,然而融合的道路也必定是漫长的,以前的历史包袱等也需要背上。

 

3.为什么调试的时候需要编译选项中添加 -g. 自行调研readelf命令

    调试的时候需要编译选项中添加 -g. 加选项-g是为了能够调试。不加可以运行,但不能调试。

    readelf

    readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息.

 

    命令参数:    <1>-h或者--file-header。显示在elf文件头里包含的所有信息。

                             <2>-l  显示程序头表信息, 包括有几个段,每个段的属性,以及每个段中包含有哪几个节

                             <3>-S  显示节区表内所有的信息,包括每个节的属性

                             <4>-h 显示所有头的信息,包括elf文件头,程序头和节头,即“-l,-h,-S”的组合。

                             <5>-s 显示符号表的信息,包含静态符号表和动态符号表。如果指关心动态符号表,可以直接用“-d”。

                             <6>-r 显示所有定位入口的信息。

4.在Linux下实现进度条程序. 通过makefile进行编译

依次输入命令如下:

1. vim proc_bar.c(输入如下代码...)

linux基础2

 

2.将代码保存并退出

3..vim Makefile(输入如下命令...)

linux基础2

4.保存并退出

5.make

linux基础2

6../proc_bar

linux基础2