函式庫:
1、便於移植,方便使用
2、保密, 保護智財權
靜態庫:編譯生成靜態庫
編譯生成靜態庫:
1、把.c
檔案編譯生成.o
檔案
gcc -c add.c 或gcc add.c -c -o add.c
2、把.o
檔案編譯生成.a
靜態庫
ar -rc libadd.a add.o
3、靜態庫的使用
4、執行檔案gcc main.c libadd.a -o project
gcc main.c -o project libadd.a
gcc main.c -o project -i./include -l./lib -ladd
./project
動態庫:編譯生成動態庫
1、把.c檔案編譯生成.o動態庫
gcc -fgic -shared add.c -o libadd.so
2、動態庫的使用:
>
`gcc main.c -o project libadd.so
>
> gcc main.c -o project -i./include -l./lib -ladd`
>
(-i./include 表示連線標頭檔案,-l./lib 表示連線動態庫,-ladd表示去掉動態庫檔案字首lib和字尾.so)
3、執行二進位制檔案時:
./project
如果出現以下錯誤:
./main: error while loading shared libraries: libadd.so: cannot open shared object file: no such file or directory
解決方法:
(0)編譯過程中指定動態庫路徑
gcc demo.c libsum/sum.c -o demo -i./libmax -l./libmax -lmax -wl,-rpath=./libmax
如果需要指定多個路徑,使用冒號 : 作為分隔符
gcc demo.c -o demo -wall -i./libmax -l./libmax -lmax -i./libsum -l./libsum -lsum -wl,-rpath=./libmax/:./libsum/
cp libadd.so /lib
(2)臨時設定環境變數ld_library_path:
期嵌入式直播10班/02linux基礎/02/code/test_動態庫
export ld_library_path=$ld_library_path:/mnt/hgfs/gz2019期嵌入式直播10班/02linux基礎/02/code/test_動態庫
(3)永久設定:
把export ld_library_path=$ld_library_path:/mnt/hgfs/gz2019期嵌入式直播10班/02linux基礎/02/code/test_動態庫
加入到配置檔案~/.bashrc
注意
:ld_library_path告訴編譯器去哪個路徑下找動態庫
linux 靜態庫和動態庫生成
靜態庫 ar rcs lib a xx1.o xx2.o 生成靜態庫 c 建立乙個庫 s 建立目標檔案索引,在建立較大的庫時,能加快時間 rablib lib a 為庫檔案建立索引。ar t lib a 檢視庫檔案內所含目標檔案名字 ar tv lib a 檢視庫檔案內所含目標檔案,顯示檔名 時間 ...
Linux靜態庫和動態庫的生成
建立庫 靜態庫 在編譯時就拷貝到應用程式中,因此當多個應用程式同時引用乙個靜態庫時,記憶體中將會有呼叫函式的多個副本。優點 節省編譯時間。動態庫 在程式開始執行後呼叫庫函式時才被載入,被調函式的央存中只有乙個副本,並且動態庫可以在程式執行期間釋放動態庫所占用的記憶體,騰出空間供其他程式使用。建立靜態...
Linux生成動態庫 so與生成靜態庫 a
動態庫共享庫 第一步 通過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...