Linux生成動態庫 so與生成靜態庫 a

2021-07-23 06:13:01 字數 793 閱讀 3136

動態庫共享庫

第一步:通過gcc -fpic -c 編譯生成.o檔案

gcc -fpic -c a.c   (編譯生成.o檔案 -fpic與位置無關)

gcc -fpic -c b.c

生成a.o,b.o編譯檔案。

第二步:通過上面已經生成的a.o,b.o檔案生成.so檔案

方法1: gcc -shared -wl -o liba.so a.o

方法2: gcc -shared -wl,-soname,libab.so.1 -o libab.so.1.10 a.o b.o

第三步:通過依賴庫編譯生成可執行檔案error while loading shared libraries: libcalc.so.1: cannot open shared object file: no such file or directory

ldd察看依賴庫:

libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb760c000)

/lib/ld-linux.so.2 (0xb77c9000)

注意點libcalc.so.1 => not found動態庫沒有找到

解決方法:

gcc -c -fpic *.c

ar rcs libxx.a *.o

nm :察看檔案包含內容

linux 下生成動態庫 so並引用

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

Linux上FFmpeg生成so庫

我用的是ubuntu做開發的,之前使用過centos7去編譯的 感覺太麻煩出錯了,從朋友那得知ubuntu和debian 是適用於開發的 1.cd home 切換到home 目錄 2.mkdir ndk在home目錄下新建資料夾 ndk 3.把linux版的ndk上傳到ubuntu伺服器上 4.cd...

so動態鏈結庫生成 呼叫

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