linux下動態庫的編譯使用

2021-08-30 07:24:59 字數 749 閱讀 9883

linux下動態庫的編譯

1 實踐

test_cl.c:

1 #include

2 #include

3 4 extern int add(int a, int b);

5 #define labeladdr

6 main()

7 test_so.c

1 int add(int a, int b)

2 test_so1.c

1 int add(int a, int b)

2 1、

gcc -c -fpic test_so.c

生成test_so.o

2、gcc -shared -fpic -o libtest_so.so test_so.o

生成libtest_so.so

3、(rm test_so.o)

gcc test_cl.c -l. -ltest_so

4、export ld_library_path=`pwd`

5、./a.out

結果是add(a+b) = 3

6、(rm libtest_so.so)

gcc -shared -fpic -o libtest_so.so test_so1.c

7、./a.out

結果是add(a+b) = -1

(如果動態庫依賴於其他的動態庫不存在,在鏈結成可執行檔案時才會報錯)

(優先鏈結動態庫的,除非用-static引數指定鏈結靜態庫)

linux下動態庫的使用

動態庫的呼叫分為隱式呼叫和顯式呼叫 動態庫是由原始檔編譯而成的,與普通程式不同的是,動態庫沒有main函式,不能單獨執行,需要被呼叫才能執行。寫乙個四則運算的動態庫 calculate.h檔案 ifndef calculate h h define calculate h h 加法 int add ...

linux動態庫的編譯與使用

linux下的動態庫以.so為字尾,我也是初次在linux下使用動態庫,寫一點入門步驟,以便以後能方便使用。第一步 編寫linux程式庫 檔案1.動態庫介面檔案 動態庫介面檔案getmaxlen.h ifndef getmaxlen h define getmaxlen h int getmaxle...

linux下動態庫編譯的依賴問題

這裡主要是想試驗一下,對乙個具有多層巢狀的動態庫進行編譯時,是否要把最底層的庫也包含進來的問題,結論是 只要直接依賴的庫名稱,不需要最底層庫名稱。一,目錄結構 zzz add add.cpp add.h calc calc.cpp calc.h main main.cpp pkg pkg.cpp p...