首先定義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 動態庫的編譯 下面通過乙個例子來介紹如何生成乙個動態庫。這裡...