linux环境中C编程基本方法

上传人:壹****1 文档编号:490345368 上传时间:2023-07-08 格式:DOCX 页数:9 大小:13.12KB
返回 下载 相关 举报
linux环境中C编程基本方法_第1页
第1页 / 共9页
linux环境中C编程基本方法_第2页
第2页 / 共9页
linux环境中C编程基本方法_第3页
第3页 / 共9页
linux环境中C编程基本方法_第4页
第4页 / 共9页
linux环境中C编程基本方法_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《linux环境中C编程基本方法》由会员分享,可在线阅读,更多相关《linux环境中C编程基本方法(9页珍藏版)》请在金锄头文库上搜索。

1、这篇文章介绍在 LINUX 下进行 C 语言编程所需要的基础知识 .在这篇文章当中 我们将会学到以下内容 :源程序编译Makefile 的编写程序库的链接程序的调试头文件和系统求助1. 源程序的编译在Linux 下面,如果要编译一个 C语言源程序,我们要使用 GNU 的 gcc编译器. 面我们以一个实例来说明如何使用 gcc编译器 .假设我们有下面一个非常简单的源程序 (hello.c:int main(int argc,char *argvprintf(Hello Linuxn;要编译这个程序 ,我们只要在命令行下执行 :gcc -o hello hello.cgcc 编译器就会为我们生成一

2、个 hello的可执行文件 .执行./hello 就可以看到程 序的输出结果了 .命令行中 gcc 表示我们是用 gcc 来编译我们的源程序 ,-o 选项表示 我们要求编译器给我们输出的可执行文件名为 hello 而 hello.c 是我们的源程序文件gcc编译器有许多选项 ,一般来说我们只要知道其中的几个就够了 . -o选项我们 已经知道了 ,表示我们要求输出的可执行文件名 . -c选项表示我们只要求编译器输出 目标代码 (.o文件,而不必要输出可执行文件 . -g选项表示我们要求编译器在编译的 时候提供我们以后对程序进行调试的信息 .知道了这三个选项 ,我们就可以编译我们自己所写的简单的源

3、程序了 ,如果你想 要知道更多的选项 ,可以查看 gcc 的帮助文档 ,那里有着许多对其它选项的详细说明2. Makefile 的编写假设我们有下面这样的一个程序 ,源代码如下 :/* main.c */#include mytool1.h#include mytool2.hint main(int argc,char *argvmytool1_print(hello;mytool2_print(hello;/* mytool1.h */#ifndef _MYTOOL_1_H#define _MYTOOL_1_Hvoid mytool1_print(char *print_str;#endif

4、/* mytool1.c */#include mytool1.hvoid mytool1_print(char *print_strprintf(This is mytool1 print %sn,print_str;/* mytool2.h */#ifndef _MYTOOL_2_H#define _MYTOOL_2_Hvoid mytool2_print(char *print_str;#endif/* mytool2.c */#include mytool2.hvoid mytool2_print(char *print_strprintf(This is mytool2 print

5、%sn,print_str;当然由于这个程序是很短的我们可以这样来编译gcc -c main.cgcc -c mytool1.cgcc -c mytool2.cgcc -o main main.o mytool1.o mytool2.o这样的话我们也可以产生 main 程序,而且也不时很麻烦 .但是如果我们考虑一下 如果有一天我们修改了其中的一个文件 (比如说 mytool1.c 那么我们难道还要重新输 入上面的命令 ?也许你会说,这个很容易解决啊 ,我写一个 SHELL 脚本,让她帮我去完 成不就可以了 .是的对于这个程序来说 ,是可以起到作用的 .但是当我们把事情想的更 复杂一点 ,如果我

6、们的程序有几百个源程序的时候 ,难道也要编译器重新一个一个的 去编译?为此 ,聪明的程序员们想出了一个很好的工具来做这件事情 ,这就是 make.我们 只要执行以下 make,就可以把上面的问题解决掉 .在我们执行 make之前 ,我们要先编 写一个非常重要的文件 .-Makefile. 对于上面的那个程序来说 ,可能的一个 Makefile 的文件是 :# 这是上面那个程序的 Makefile 文件main:main.o mytool1.o mytool2.o #依赖关系gcc -o main main.o mytool1.o mytool2.o #编译规则main.o:main.c myt

7、ool1.h mytool2.hgcc -c main.cmytool1.o:mytool1.c mytool1.hgcc -c mytool1.cmytool2.o:mytool2.c mytool2.hgcc -c mytool2.c有了这个 Makefile 文件 ,不过我们什么时候修改了源程序当中的什么文件 ,我们 只要执行 make命令 ,我们的编译器都只会去编译和我们修改的文件有关的文件 ,其 它的文件她连理都不想去理的 .下面我们学习 Makefile 是如何编写的 .在 Makefile 中也 #开始的行都是注释行 .Makefile 中最重要的是描述文件的依赖 关系的说明 .

8、一般的格式是 :target: componentsTAB rule第一行表示的是依赖关系 .第二行是规则 .比如说我们上面的那个 Makefile 文件的第二行main:main.o mytool1.o mytool2.o表示我们的目标 (targetmain的依赖对象 (components是 main.o mytool1.o mytool2.o 当倚赖的对象在目标修改后修改的话 ,就要去执行规则一行所指定的命令 就象我们的上面那个 Makefile 第三行所说的一样要执行 gcc -o main main.o mytool1.o mytool2.o 注意规则一行中的 TAB 表示那里是一

9、个 TAB 键Makefile 有三个非常有用的变量 .分别是 $,$,$代表的意义分别是 :$-目标文件 ,$-所有的依赖文件 ,$-第一个依赖文件 .如果我们使用上面三个变量 ,那么我们可以简化我们的 Makefile 文件为 :# 这是简化后的 Makefilemain:main.o mytool1.o mytool2.ogcc -o $ $main.o:main.c mytool1.h mytool2.hgcc -c $mytool1.o:mytool1.c mytool1.hgcc -c $mytool2.o:mytool2.c mytool2.hgcc -c $经过简化后我们的 M

10、akefile 是简单了一点 ,不过人们有时候还想简单一点 .这里 我们学习一个 Makefile 的缺省规则.c.o:gcc -c $这个规则表示所有的 .o文件都是依赖与相应的 .c文件的.例如 mytool.o 依赖于 mytool.c 这样 Makefile 还可以变为 :# 这是再一次简化后的 Makefilemain:main.o mytool1.o mytool2.ogcc -o $ $.c.o:gcc -c $/sin 命令,然后看/sin文件,到那里面去找了 . 在 sin 文件当中 ,我会找到这样的一行 libm-2.1.2.so:00009fa0 W sin 这样我就知道

11、了 sin 在 libm-2.1.2.so 库里面 ,我用-lm 选项就可以了 (去掉前面的 lib 和后面的版本标志 ,就剩 下 m 了所以是 -lm. 如果你知道怎么找 ,请赶快告诉我 ,我回非常感激的 .谢谢 !4. 程序的调试我们编写的程序不太可能一次性就会成功的 ,在我们的程序当中 ,会出现许许多多我们想不到的错误 ,这个时候我们就要对我们的程序进行调试了最常用的调试软件是 gdb.如果你想在图形界面下调试程序 ,那么你现在可以选 择 xxgdb.记得要在编译的时候加入 -g 选项.关于 gdb 的使用可以看 gdb的帮助文件 . 由于我没有用过这个软件 ,所以我也不能够说出如何使用

12、 . 不过我不喜欢用 gdb.跟踪 一个程序是很烦的事情 ,我一般用在程序当中输出中间变量的值来调试程序的 .当然 你可以选择自己的办法 ,没有必要去学别人的 .现在有了许多 IDE 环境 ,里面已经自己 带了调试器了 .你可以选择几个试一试找出自己喜欢的一个用 .5. 头文件和系统求助有时候我们只知道一个函数的大概形式 ,不记得确切的表达式 ,或者是不记得着 函数在那个头文件进行了说明 .这个时候我们可以求助系统 .比如说我们想知道 fread这个函数的确切形式 ,我们只要执行 man fread 系统就 会输出着函数的详细解释的 .和这个函数所在的头文件说明了 . 如果我们要 write 这 个函数的说明 ,当我们执行 man write 时,输出的结果却不是我们所需要的 . 因为我们 要的是 write 这个函数的说明 ,可是出来的却是 write

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号