所有书的第一章都是介绍性的,这本书也不例外,同时也编了所有编程书籍中最经典的例子hello.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf(“Hello World\n”);
exit(0);
}
当然,重点不在这,而是下面的编译过程:
& gcc -o hello hello.c
这句命令的意思是编译hello.c文件,生成名为hello的可执行文件。-o选项是用来指定生成文件的名字。这里生成的可执行文件就相当于windows下的.exe文件了,注意:linux下的可执行文件没有后缀,当然也可以加后缀,但是只是名字而已。
执行hello:
& ./hello
输出
Hello World
很简单,不是吗?
再看看如何编写linux下的库文件。
先看看书中对库文件的定义:Libraries are collections of precompiled functions that have been written to be reusable.( 这里就不翻译了,保证原汁原味)系统中标准的库文件在/lib和/usr/lib里面。对库文件的命名linux也有自己的一套规则,以lib开头,接下来是的部分表示这个库的类型(比如c代表c库,m代表数学库),最后部分以点(.)加后缀,后缀有两种,如下:
.a 代表是静态库
.so代表是动态库
好了,看看下面这个例子。这个例子定义了两个函数fred.c和bill.c,然后生成一个库文件,在另外一个例子中调用这两个函数。
1.定义两个函数:
Here’s the first:
#include <stdio.h>
void fred(int arg)
{
printf(“fred: we passed %d\n”, arg);
}
And here’s the second:
#include <stdio.h>
void bill(char *arg)
{
printf(“bill: we passed %s\n”, arg);
}
2.编译:
$ gcc -c bill.c fred.c
$ ls *.o
bill.o fred.o
可以看到生成了两个.o文件。细心的朋友会注意到,gcc后面用了-c选项,意思是让编译器编译时只生产.o文件就停止编译了。
3.写一个lib.h头文件来申明这两个函数
void bill(char *);
void fred(int);
4.创建programm.c文件
#include <stdlib.h>
#include “lib.h”
int main()
{
bill(“Hello World”);
exit(0);
}
这个主函数中只调用了bill函数
5.编译并运行
$ gcc -c program.c
$ gcc -o program program.o bill.o
$ ./program
bill: we passed Hello World
$
紫色部分是输出。
6.我们来做一个库文件,生成库文件使用的命令是ar
$ ar crv libfoo.a bill.o fred.o
a - bill.o
a - fred.o
这时已经得到了libfoo.a,这个库文件中包含了bill和fred两个功能函数。执行:
$ gcc -o program program.o libfoo.a
$ ./program
bill: we passed Hello World
$
同样得到正确的结果。
文章评论(0条评论)
登录后参与讨论