资源描述:
《linux下c语言编程基础知识》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容:源程序编译Makefile的编写程序库的链接程序的调试头文件和系统求助----------------------------------------------------------------------------1.源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器.下面我们以一个实例来说明如何使用gcc编译器.假设我们有下面一个非常简单的源程序(hello.c): intmain(intargc,char**ar
2、gv) {printf("HelloLinux"); }要编译这个程序,我们只要在命令行下执行:gcc-ohellohello.cgcc编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程序的输出结果了.命令行中gcc表示我们是用gcc来编译我们的源程序,-o选项表示我们要求编译器给我们输出的可执行文件名为hello而hello.c是我们的源程序文件.gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了.-o选项我们已经知道了,表示我们要求输出的可执行文件名.-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件.-g选
3、项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息.知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明.gcc编译器还有2个非常有用的选项(-O2-Wall),几乎在所有用gcc编译的程序中都可以看到这2个选项.-O2选项表示我们希望编译器在编译的时候对我们的程序进行一定程度的优化.2表示我们优化的级别是2.当然你也可以不使用2,而是使用1-3的中的任何一个,不过习惯上我们都使用2的优化级别.关于优化的详细情况可以参考gcc的帮助手册. -Wall是警告选项,表
4、示我们希望gcc在编译的时候,让gcc输出她认为的一些程序中可能会出问题的一些警告信息,比如指针没有初始化就进行赋值等等一些警告信息. 2.Makefile的编写 假设我们有下面这样的一个程序,源代码如下: /* main.c*/#include #include intmain(intargc,char**argv){ mytool1_print("hello"); mytool2_print("hello");} /* mytool1.h */#ifndef_MYTOOL_1_H#define_MYTOOL_1_Hvoidmytool1_pr
5、int(char*print_str);#endif /* mytool1.c */#include voidmytool1_print(char*print_str){ printf("Thisismytool1print%s",print_str);} /*mytool2.h*/#ifndef_MYTOOL_2_H#define_MYTOOL_2_Hvoidmytool2_print(char*print_str);#endif /* mytool2.c */#include voidmytool2_print(char*print_str){
6、 printf("Thisismytool2print%s",print_str);} 当然由于这个程序是很短的我们可以这样来编译 gcc-cmain.c-I.gcc-cmytool1.c-I.gcc-cmytool2.c-I.gcc-omainmain.omytool1.omytool2.o 因为我们在程序中使用了我们自己的2个头文件,而在包含这2个头文件的时候,我们使用的是这样编译器在编译的时候会去系统默认的头文件路径找我们的2个头文件,由于我们的2个头文件不在系统能够的缺省路径下面,所以我们自己扩展系统的缺省路径,为此我们使用了-I.选项,表示将系统缺省
7、的头文件路径扩展到当前路径. 这样的话我们也可以产生main程序,而且也不是很麻烦.但是考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我去完成不就可以了.是的对于这个程序来说,是可以起到作用的.但是当我们把事情想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译? 为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make.我们只要执行一下make,就可以把上面