linux下生成 so檔案和 a檔案

2021-07-15 03:55:54 字數 1827 閱讀 2909

1.

.o 就相當於windows裡的obj檔案 ,乙個.c或.cpp檔案對應乙個.o檔案

.a 是好多個.o合在一起,用於靜態連線 ,即static mode,多個.a可以鏈結生成乙個exe的可執行檔案

.so 是shared object,用於動態連線的,和windows的dll差不多,使用時才載入。

得到了ts:error while loading shared libraries: libs.so: cannot open shared object file: no such file or directory 系統不能找到我們自己定義的libs.so,那麼告訴他,修改變數ld_library_path。

2. 怎麼生成so動態庫檔案?

得到了ts:error while loading shared libraries: libs.so: cannot open shared object file: no such file or directory 系統不能找到我們自己定義的libs.so,那麼告訴他,修改變數ld_library_path。

3. 怎麼生成a靜態庫檔案?

編譯:得到輸出檔案libs.o 

gcc -fpic -g -c s.c -o libs.o 

ar r .a .o

4.看.a結構,找其中的原檔案,用ar -t yourfile.a

看動態庫用 nm -d lib*.so

test.h

1 #ifndef _test_h_

2#define _test_h_34

void testa();

5void testb();67

#endif

test_a.cpp

1 #include 

2 #include "

test.h"3

4void testa()

5

test_b.cpp

1 #include 

2 #include "

test.h"3

4void testb()

5

生成so檔案的命令

g++ test_a.cpp test_b.cpp -fpic -shared -o libtest.so
生成.a檔案的命令

1 gcc -c test_a.cpp

2 gcc -c test_b.cpp

3 ar -r libtest.a test_a.o test_b.o

test.cpp

1 #include "

test.h"2

3int main()

4

採用動態庫編譯命令

g++ test.cpp -o test -l. -ltest
執行

export ld_library_path=./

./test

執行結果如下。

採用靜態庫編譯命令

g++ -static -o test -l. -ltest test.cpp
執行效果

靜態庫的巢狀呼叫,有時候我想做乙個自己的靜態庫,它裡面要呼叫其他靜態庫裡面的函式,經過試驗

這個好像用ar -r不行,所以就在鏈結的時候需要兩個庫檔案都包含,同時要有這乙個標頭檔案才行。。。

linux下生成 so檔案和 a檔案

test.h 1 ifndef test h 2 define test h 34 void testa 5void testb 67 endif test a.cpp 1 include 2 include test.h 3 4void testa 5 test b.cpp 1 include 2...

Linux下生成 so檔案

linux下的.so檔案即shared libraries。shared library 是程式執行時載入的庫檔案。當乙個shared library 被成功的安裝以後,之後啟動的所有程式都會自動使用最新的shared library。也就是說,生成乙個.so檔案並告訴編譯器它的位置之後,所有的需要...

linux 下生成動態庫 so並引用

動態庫的引入及減少了主 檔案的大小,同時生成的動態庫又是動態載入的,只有執行的時候才去載入,linux 下的 動態庫 so 就像windows下的 dll一樣。有關動態庫的概念自行上網搜。一下是建立及引用動態庫 test so.h ifndef test so h define test so h ...