linux共享庫

庫:是一組預先編譯好的函數的集合,linux中標準系統庫文件通常存儲在/lib和/usr/lib目錄中 linux

靜態庫:在程序編譯過程當中,就被連接到了程序編寫者所寫的源代碼中,靜態庫以.a結束。 數組

共享庫:在程序運行時載入,編譯時只需說明所須要的共享庫文件便可。共享庫以.so接受。 函數

頭文件:用於保存程序的聲明。 開發

makefile文件:makefile帶來的好處就是——「自動化編譯」,一旦寫好各文件的依賴項及其編譯方式,只須要一個make命令,整個工程徹底自動編譯,極大的提升了軟件開發的效率。 自動化

一.共享庫示例: io

一、在bill.h頭文件中,寫函數求數組最大元素的函數聲明; 編譯

$ more bill.h
int bill(int a[], int n); 效率

二、在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;
}
三、在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;
} 變量

四、編譯共享庫以及main.c;
$ gcc -shared -fPIC bill.c -o libbill.so gcc

結果以下:

$ ls
bill.c  bill.h  libbill.so  main.c

五、設置環境變量(未設置環境變量,則系統只在默認的標準路徑下尋找共享庫,設置了環境變量以後,則系統首先在環境變量指定的路徑下尋找共享庫)

/*此環境變量的設置只是對於共享庫而言*/
$ export LD_LIBRARY_PATH=./

六、編譯生成可執行程序/* 其中-L.表示庫文件的查找路徑爲當前路徑(.),-lbill表示所要使用的文件共享庫文件名爲bill

頭文件因爲處於當前路徑,故能夠省略不寫,當處於系統標準路徑時也可省略不寫*/
$ gcc -o main main.c -L. -lbill

七、編譯成功,執行main程序
$ ls
bill.c  bill.h  libbill.so  main  main.c
$ ./main
100

二.共享庫的makefile:

仍然上面爲例子:

一、上例中源代碼爲:

$ ls
bill.c  bill.h  main.c  makefile
二、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

三、make的過程:

$ make
gcc -shared -fPIC bill.c -o libbill.so
export LD_LIBRARY_PATH=./
gcc -o main main.c -L. -lbill

4.執行結果爲:

$ ./main

100

相關文章
相關標籤/搜索