您好,欢迎访问三七文档
LINUX编程基础开发基础介绍Linux的编程常识Linux下VIM的使用编译器GCC的使用调试器gdb的使用项目管理工具make的使用整体思路:首先讲解Linux上进行编程的常识,在此基础上,重点讲述Linux上C语言编程的基本工具,主要是它们的重要选项和基本用法。接下来讲述在项目组织和开发过程中非常重要的工具,即GNUmake和makefile。编程环境概述主要涉及到编辑器、编译链接器、调试器及项目管理工具。编辑器Linux中最常用的编辑器有Vi(Vim)和Emacs编译链接器在Linux中,最常用的编译器是Gcc编译器。它是GNU推出的功引导代码能强大、性能优越的多平台编译器.调试器Gdb是绝大多数Linux开发人员所使用的调试器,它可以方便地设置断点、单步跟踪等编程环境概述项目管理器Linux中的项目管理器“make”是一种控制编译或者重复编译软件的工具。它还能自动管理软件编译的内容、方式和时机,使程序员能够把精力集中在代码的编写上而不是在源代码的组织上。二、Linux下VIM的使用vi是Linux最常用的编辑器,Linux里提供的是vi的加强版——vim,但同VI是完全兼容。vim进入:•在系统提示符下键入命令vim,后面跟上想要编辑(或者建立)的文件名,VIM可以自动载入所要编辑的文件或是开启一个新文件。VIM的退出:•可以在命令行方式下使用命令“:wq”或者“:q!”,前者的功能是写文件并从VIM中退出,后者的功能是从VIM中退出,但不保存所作的修改(注意冒号)。Vim的图形版本gvim;二、Linux下VIM的使用Vi3种基本工作模式:命令模式、插入模式、末行模式。二、Linux下VIM的使用VI3种基本工作模式:命令模式下•键入的每个字符都被当作一个命令处理。刚启动时,处于命令模式。在插入模式下按“ESC”,也可以回到指令模式。插入模式•在命令模式下按“a”、“i”、“o”进入插入模式。末行命令模式•也是一种常用模式,用于输入命令进行文字编辑的辅助功能。通过冒号“:”进入末行模式。例如“:q”向左移一个字符←I向右移一个字符→J向上移一个字符↑k向下移一个字符↓0移至该行之首Home$移至该行之末End向后翻一页PageDownCtrl+b向前翻一页PageUp^移至该行的第一个非空白字符处进入替换状态,直到按Esc回到命令模式为止Inserts删除光标所在字符,并进入输入模式S删除光标所在的行,并进入输入模式u恢复刚才被修改的文本U恢复光标所在行的所有修改.重复上一次命令的操作命令说明:q结束编辑:q!强制离开vi,放弃存盘:w存盘:wfilename将编辑内容保存为名为filename的文件:wq存盘并退出练习建立一个新文件输入字符复制第一行到第二行复制第一二行到第三行撤销上面的步骤删除第二行保存推出编译器的使用GNUCANSIC(标准C)GNUC--支持GNU扩展的C语言。GNUCC对C语言提供了很多扩展,这些扩展对优化、目标代码布局、更安全的检查等方面提供了很强的支持。Linux内核代码使用了大量的GNUC扩展,以至于能够编译Linux内核的唯一编译器是GNUCC,以前甚至出现过编译Linux内核要使用特殊的GNUCC版本的情况。编译器的使用GCC(GNUCompilerCollection)GNUCC(简称为Gcc)是GNU项目中符合ANSIC标准的编译系统,能够编译用C、C++和ObjectC等语言编写的程序。Gcc又是一个交叉平台编译器在当前CPU平台上为多种不同体系结构的硬件平台开发软件。适合在嵌入式领域的开发编译。编译器的使用gcc则通过后缀来区别输入文件的类别。gcc所遵循的部分后缀约定规则:.c:C语言源代码文件;.a:是由目标文件构成的档案库文件;.C,.cc或.cxx:是C++源代码文件;.h:是程序所包含的头文件;.i:是已经预处理过的C源代码文件;.ii:是已经预处理过的C++源代码文件;.o:是编译后的目标文件;.s:是汇编语言源代码文件;.S:是经过预编译的汇编语言源代码文件。编译器的使用GCC通常gcc后跟一些选项和文件名来使用GCC编译器gcc[options][filenames]其中options就是编译器所需要的参数,filenames给出相关的文件名称例如:gcc–ohellohello.cGCC编译器的使用Gcc的编译流程分4个步骤:预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking)每个阶段分别调用不同的工具进行处理。预处理链接编译汇编源程序(*.c)可执行文件预处理器编译器汇编器连接器GCC编译器的使用预处理链接编译汇编源程序(*.c)可执行文件预处理器编译器汇编器连接器GCC首先调用预处理程序cpp进行预处理,展开程序代码中的宏,并在其中插入头文件所包含的内容;把预处理后的源代码编译产生汇编代码;调用as汇编器处理这些汇编代码产生目标代码;通过ld连接器创建二进制可执行文件或者建立库文件。GCC编译器的使用库和头文件的保存位置函数库•预先编译好的函数集合•/lib:系统必备共享库•/usr/lib:标准共享库和静态库•/usr/X11R6/lib:X11R6的函数库•/usr/local/lib:本地函数库头文件•程序的设计需要头文件来提供常数的定义和库函数调用的声明•/usr/include:系统头文件•/usr/local/include:本地头文件GCC编译器的使用Gcc的编译流程预处理阶段:gcc–Ehello.c–ohello.i编译阶段:gcc–Shello.i–ohello.s汇编阶段:gcc–chello.s–ohello.o链接阶段:gcchello.o–ohellogcchello.c-ohello执行:./hello编译器的使用GCC的选项GCC有超过100个的编译选项可用.主要包括编译处理选项、警告选项、出错选项、优化选项、体系结构选项。-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-ooutput_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-S编译选项告诉GCC在为C代码产生了汇编语言文件后停止编译.GCC产生的汇编语言文件的缺省扩展名是.s.GCC编译器的使用GCC选项-g,产生符号调试工具(GNU的gdb)所必要的符号信息,要想对可执行程序进行调试,我们就必须加入这个选项。-O,对程序进行优化编译、连接,产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。GCC编译器的使用GCC选项-Idirname,在头文件的搜索路径列表中添加dirname目录。这个选项的作用是:到指定的dirname目录中去寻找需要的头文件。-Ldirname,在库文件的搜索路径列表中添加dirname目录。在预设状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的档案库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预设路径中寻找。-lname,在连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为“libm.a”的数学函数库。编译器的使用GCC选项更为详尽的资料可以参看Linux系统的联机帮助。(man)很多的GCC选项包括一个以上的字符.因此你必须为每个选项指定各自的连字符,并且就象大多数Linux命令一样你不能在一个单独的连字符后跟一组选项.•gcc–g–O2–ohellohello.cgcc包含的c/c++编译器一般c程序就用gcc编译,c++程序就用g++编译GCC编译器的使用练习使用gcc编译C源文件通过Helloworld程序,熟悉gcc及其选项的使用。HelloWorldhello.cintmain(void){printf(“helloworld!!!\n”);return0;}编译$gcc-ohellohello.cGCC编译器的使用多个c文件两个源文件main.c和print.c两个源文件,现在要编译生成一个计算阶乘的程序。print.cintprint(){printf(hello\n);return0;}GCC编译器的使用多个c文件factorial.cmain.c#includestdio.hintmain(){print();return0;}GCC编译器的使用多个c文件编译:$gcc-ohellomain.cprint.c练习编译多个c文件调试器Gdb使用流程Gdb调试器是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。Gdb让您能够看到一个程序的内部结构,指出变量的值,设置断点并在源码中进行单步执行。调试器Gdb使用流程要使用gdb进行调试,一定要在编译时加上调试选项“-g”。•gcc-gtest.c-otest•gdbtest使用“help”命令查看帮助信息。调试器Gdb的简单使用查看文件l设置断点b+行号查看断点情况infob运行代码rrun查看变量值“p”+变量值查看堆栈:bt单步运行“n”(next)或“s”step)•若有函数调用的时候,“s”会进入该函数而“n”不会进入该函数。恢复程序运行“c”(continue)调试器Gdb基本命令通过查看help查找命令。•Gdb的help将其分成了很多种类(class)。•help•Help“种类”查看该种类中的命令列表•Help命令已知命令名:Help命令调试器#includestd
本文标题:linux编程基础
链接地址:https://www.777doc.com/doc-5268676 .html