1. 函式庫有兩種:靜態庫和動態庫。
靜態庫在程式編譯的時候會被連線到目標**中,程式執行時將不再需要改靜態庫。
動態庫中程式編譯的時候並不會連線到目標**中,而是在程式執行時才被載入,因此在程式執行的時候還需要動態庫的存在。
程式1: hello.h
#ifndef hello_h
#define hello_h
void hello(const char *name);
#endif //hello_h
程式2: hello.c
#include
void hello(const char *name)
程式3: main.c
#include "hello.h"
int main()
顯然直接編譯main.c會報錯,所以先要生成hello.h的靜態庫,根據hello.o來生成。
2.建立靜態庫,.a為字尾名
#gcc -c hello.c
#ar -rc libmyhello.a hello.o 或者 ar cr libmyhello.a hello.o
接著執行
# gcc -o main main.c libmyhello.a 或者 gcc -o main main.c -l. -lmyhello
#./main
hello everyone
刪除靜態庫檔案,程式執行正常。
3.建立動態庫,擴充套件名為.so
#gcc -shared -fpic -o libmyhello.so hello.o
動態庫的編譯
#gcc -o hello main.c -l. libmyhello.so
#./hello
/hello:error while loading shared libraries: libmyhello.so: cannot open shared object file: no such file or directory
出錯了,提示是找不到動態庫檔案,程式執行時會在/usr/lib下面找這個動態庫檔案,找不到就會出錯。
:可以將庫檔案拷貝到/usr/lib和目錄下,執行即可。
Linux中建立靜態庫和動態庫
我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時 會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要 動態庫存在。本文主要通過舉例來說明在linux中如何建立...
Linux中建立靜態庫和動態庫
分類 程式人生 2008 11 05 00 26 257人閱讀 收藏舉報 我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時 會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在...
linux建立靜態庫和動態庫
2015新年第一篇部落格,哈哈,這個2月還沒寫過部落格呢,從現在開始繼續!一 建立靜態庫 在本例中將建立乙個小型靜態函式庫libfoo,包含兩個函式bill fred 1 編輯兩個檔案bill.c和fred.c bill.c include void bill fred.c include void...