linux中建立靜態庫和動態庫

2022-04-04 03:27:36 字數 1081 閱讀 6394

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...