標籤:使用 strong 檔案 linux for 代碼
庫:是一組預先編譯好的函數的集合,linux中標準系統庫檔案一般儲存在/lib和/usr/lib目錄中
靜態庫:在程式編譯過程中,就被連結到了程式編寫者所寫的原始碼中,靜態庫以.a結束。
共用庫:在程式運行時載入,編譯時間只需說明所需要的共用庫檔案即可。共用庫以.so接受。
標頭檔:用於儲存程式的聲明。
makefile檔案:makefile帶來的好處就是——“自動化編譯”,一旦寫好各檔案的依賴項及其編譯方式,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。
一.共用庫樣本:
1、在bill.h標頭檔中,寫函數求數組最大元素的函式宣告;
$ more bill.h
int bill(int a[], int n);
2、在bill.c檔案中引入標頭檔,寫該函數的實現;
$ more bill.c
#include "bill.h"
int bill(int a[], int n)
{
int i,max = a[i];
for( i = 0; i < n; ++i)
{
if( max < a[i])
{
max = a[i];
}
}
return max;
}
3、在main.c中寫主程式內容,調用該函數,此時,需要引入標頭檔
$ more main.c
#include <stdio.h>
#include "bill.h"
int main()
{
int MAX;
int ar[10] = {1,23,21,34,45,56,57,48,90,100};
MAX = bill(ar,10);
printf("%d\n",MAX);
return 0;
}
4、編譯共用庫以及main.c;
$ gcc -shared -fPIC bill.c -o libbill.so
結果如下:
$ ls
bill.c bill.h libbill.so main.c
5、設定環境變數(未設定環境變數,則系統只在預設的標準路徑下尋找共用庫,設定了環境變數之後,則系統首先在環境變數指定的路徑下尋找共用庫)
/*此環境變數的設定只是對於共用庫而言*/
$ export LD_LIBRARY_PATH=./
6、編譯產生可執行程式/* 其中-L.表示庫檔案的尋找路徑為當前路徑(.),-lbill表示所要使用的檔案分享權限設定庫檔案名稱為bill
標頭檔由於處於當前路徑,故可以省略不寫,當處於系統標準路徑時也可省略不寫*/
$ gcc -o main main.c -L. -lbill
7、編譯成功,執行main程式
$ ls
bill.c bill.h libbill.so main main.c
$ ./main
100
二.共用庫的makefile:
仍然上面為例子:
1、上例中原始碼為:
$ ls
bill.c bill.h main.c makefile
2、makefile檔案如下:
$ more makefile
main: main.o libbill.so
export LD_LIBRARY_PATH=./
gcc -o main main.c -L. -lbill
main.o: main.c bill.h
gcc -c main.c
libbill.so: bill.c
gcc -shared -fPIC bill.c -o libbill.so
3、make的過程:
$ make
gcc -shared -fPIC bill.c -o libbill.so
export LD_LIBRARY_PATH=./
gcc -o main main.c -L. -lbill
4.執行結果為:
$ ./main
100