Linux下動态庫的生成及連結方法 (1)
Linux 下動态庫檔案的擴充名為".so"(Shared Object)。按照約定,所有動态庫檔案名的形式是libname.so(可能在名字中加入版本号)。這樣,線程函數庫被稱作 libthread.so。靜态庫的檔案名形式是libname.a。共享archive的檔案名形式是libname.sa。共享archive隻是一種過渡形式,幫助人們從靜态庫轉變到動态庫。 本文僅以簡單的例子介紹動态庫檔案的生成和連結方法。作業系統:VM_Red Hat Linux; GCC版本:3.2.2-5.
一、庫檔案及測試檔案代碼 庫檔案及測試檔案所在的目錄:/home/myself/libtest/。
1.庫檔案名:mylib.c
#include <stdio.h>
int my_lib_test (void)
{
printf ("/n==lib test!/n");
return 0;
}
2.測試檔案名:test.c
#include <stdio.h>
int main(void)
{
my_lib_test();
return 0;
}
二、動态庫的編譯方法
編譯庫檔案mylib.c:
$gcc -shared -o mylib.so mylib.c
如果編譯成功,會在目前目錄下生成動态庫檔案:mylib.so。
其中,編譯生成動态庫的指令為:gcc (-fpic) -shared -o mylib.so mylib.c -fpic 使輸出的對象子產品是按照可重定位位址方式生成的。 -shared指定把對應的源檔案生成對應的動态連結庫檔案。
三、動态庫的測試方法
編譯測試檔案test.c:
$ gcc -o test test.c ./mylib.so
成功編譯後,生成test檔案,運作test: $ ./test
==lib test!
其中,gcc -o test test.c ./mylib.so的最後一個參數指定所連結庫檔案的相對路徑。(相對路徑和絕對路徑應該知道吧?)
Linux下動态庫的生成及連結方法 (2)