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_test_a.cpp2#define _test_h_34
void testa();
5void testb();67
#endif
1 #includetest_b.cpp2 #include "
test.h"3
4void testa()
5
1 #include生成so檔案的命令2 #include "
test.h"3
4void testb()
5
g++ test_a.cpp test_b.cpp -fpic -shared -o libtest.so生成.a檔案的命令
1 gcc -c test_a.cpptest.cpp2 gcc -c test_b.cpp
3 ar -r libtest.a test_a.o test_b.o
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 ...