第一章 入门
开发系统导引
应用程序
/usr/bin:系统为正常使用提供的程序
/usr/local/bin,/opt:系统管理员存放的应用程序
头文件
C语言的头文件几乎都放在/usr/include
依赖特定Linux版本的头文件放在/usr/include/sys和/usr/include/linux
库文件
标准库文件存在/lib和/usr/lib
库文件的名字以lib开头,随后的部分指明什么库。文件名最后以.开始,然后给出库文件的类型:
.a表示静态函数库
.so表示动态函数库
通过给出完整库文件路径名或-l标志告诉编译器要搜索的库文件
gcc -o fred fred.c /usr/lib/libm.a
或
gcc -o fred fred.c -lm
-lm表示标准库(/usr/lib)中名为libm.a的函数库。如果是动态库,则自动选择动态库。
静态库
举例:
为两个函数fred和bill创建各自的源文件
//fred.c
#include<stdio.h>
void fred(int arg)
{
printf("fred:we passed %d\n",arg);
}
//bill.c
#include<stdio.h>
void bill(char *arg)
{
printf("bill:we passed %s\n",arg);
}
编译这两个文件
gcc -c fred.c bill.c
分别产生fred.o和bill.o文件
创建一个头文件lib.h,头文件声明库文件中的函数
//lib.h
void bill(char *);
void fred(int);
创建主程序program.c,他包含库的头文件并且调用库文件中的一个函数
//program.c
#include<stdlib.h>
#include "lib.h"
int main()
{
bill("Hello world");
exit(0);
}
创建目标文件(program.o)
gcc -c program.c
先为编译器显式指定目标文件,然后要求编译器编译你的文件并与先前编译好的目标文件链接,产生可执行文件program。
gcc -o program program.o bill.o
执行文件
./program
bill:we passed Hello world
创建库文件
将bill.o fred.o归并到一个文档中,使用ar命令
ar crv libfoo.a bill.o fred.o
a - bill.o
a - fred.o
调用函数库
gcc -o program program.o libfoo.a
注意:gcc -o filename filename.c表示编译并链接,生成filename可执行文件,gcc -c filename.c表示将filename.c进行编译,但不链接。生成filename.o文件