linux 動態鏈結庫so的封裝及呼叫

2021-08-24 17:51:44 字數 1207 閱讀 7758

首先定義hello.c檔案

#include void hello(const char * name)

定義hello.h標頭檔案

#ifndef hello_h

#define hello_h

int g_count = 100;

void hello(const char* name);

#endif //hello_h

編譯:

gcc -fpic -c hello.c

gcc -shared -o libmyhello.so hello.o

或者:gcc -fpic -shared -o libmyhello.so hello.c

拷貝libmyhello.so到/usr/lib/下或者使用 ld_library_path=. ./*** 指定鏈結位置。

定義test.c檔案

#include "hello.h"

void test(const char * name)

定義test.h標頭檔案

void test(const char* name);
編譯:

gcc -fpic -c test.c

gcc -shared -o libtest.so test.o -l. -lmyhello

或者:gcc -fpic -shared -o libmyhello.so test.c -l. -lmyhello

定義main.c檔案

#include "test.h"

#include "hello.h"

#include extern int g_count;

int main()

編譯:gcc -o main main.c -l. -lmyhello -ltest

執行main可執行程式,輸出如下:

hello , everyone!

count = 10

hello.h中全域性變數g_count初始值改變後,編譯libmyhello.so檔案,不編譯main.c檔案,直接執行main不會有任何改變,只有重新編譯main.c才能改變g_count輸出值。

動態鏈結庫修改函式中內容後編譯,執行main則會發生改變。

Linux 動態鏈結庫 so 的使用

1.背景 庫 就是已經編寫好的,後續可以直接使用的 c 靜態庫 會合入到最終生成的程式,使得結果檔案比較大。優點是不再有任何依賴。c 動態庫 動態庫,乙個檔案可以多個 同時使用記憶體中只有乙份,節省記憶體,可以隨主 一起編譯。缺點是需要標頭檔案。說 庫就是除了main函式之外的其他 都可以組成庫。2...

linux c 動態鏈結庫so編寫

linux下的動態鏈結庫是.so檔案,即 shared object,下面是乙個簡單的例子說明如何寫.so以及程式如何動態載入.so中的函式和物件。testso.h ifndef testso h define testso h extern c endif testso h testso.cpp ...

so動態鏈結庫生成 呼叫

linux下檔案的型別是不依賴於其字尾名的,但一般來講 o,是目標檔案,相當於windows中的.obj檔案 so 為共享庫,是shared object,用於動態連線的,和dll差不多 a為靜態庫,是好多個.o合在一起,用於靜態連線 1 動態庫的編譯 下面通過乙個例子來介紹如何生成乙個動態庫。這裡...