1、頭文件、庫文件
編程時需要用頭文件來提供對常量的定義和對系統函數及庫函數調用的聲明,這些頭文件幾乎總是位於 /usr/include目錄及其子目錄中。。。那些依賴於特定linux版本的頭文件通常在 /usr/include/sys 和 /usr/include/linux 中
用C語言編譯器時,可以使用 -I 標誌來包含保存在子目錄或非標準位置中的頭文件 eg:
$ gcc -I/usr/openwin/include test.c
它指示不僅在標準位置,也在/usr/openwin/include 目錄中查找test.c中包含的頭文件
同理,庫文件可通過
$ gcc -o hello -L/usr/openwin/lib hello.c -lX11
2、創建自己的靜態庫~~
自己平時寫的一些有用的源文件,可以做成靜態庫,方便以後使用
如 function1.c 、
#include<stdio.h>
void hello(char arg)
{
printf("hello,%s\n",arg);
}
function2.c .......
#include<stdio.h>
void delay(int time)
{
int i=time;
while(i>0)
{
i--;
}
}
而現在沒法創建一個完整的程序,因爲木有main函數
$ gcc -c function1.c function2.c // -c 選項阻止編譯器創建完整的程序
$ ls *.o
function1.o funtion2.o
現在可以在程序中使用這兩個函數了,方法如下
定義一個頭文件,聲明上面的兩個函數 lib.h :
void hello(char arg);
void delay(int time);
然後在程序中 program.c
#include<stdio.h>
#include "lib.h"
int main()
{
hello("linux");
delay(10);
exit(0);
}
編譯程序
$ gcc -c program.c
$ gcc -o program program.o function1.o function2.o
$./program
hello linux
$
接下來創建庫
$ ar crv libmy.a function1.o function2.o //請注意名字一定要是lib開頭
a -function1.o
a -function2.o
(有些系統可能還需要)
$ ranlib libmy.a
現在就可以在編譯程序的時候使用該庫了
$ gcc -o program program.o libmy.a
也可以
$ gcc -o program program.o -L. -lmy //如果名字不是lib開頭,則這個命令出錯。。。
-L . 選項告訴編譯器在當前目錄查找函數庫 -lmy 告訴編譯器使用名爲libmy.a的函數庫