歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> linux 中的庫

linux 中的庫

日期:2017/3/3 11:35:31   编辑:Linux技術

1. 庫:

[code]本質上來說是一種可執行代碼的二進制形式。
linux下的庫有兩種:靜態庫動態庫(共享庫)

1.1 靜態庫:

[code]在程序編譯時被連接到目標代碼中,程序運行時,將不再需要該靜態庫,因此體積較大。
優點:程序運行時將不再需要該靜態庫

缺點:可執行文件的體積變大。

後綴是 .a

1.2 動態庫:

[code]編譯時不連接到代碼中,在運行時才載入,因此程序運行時還需要動態庫存在,因此代碼體積較小。

優點:在程序運行時才被載入內存中。

缺點:程序運行時,需要動態庫存在。

後綴是 .so

2. 靜態庫的制作:

將功能函數編譯成庫

①生成目標文件( gcc -c fun.c -o fun.o ) -c 只編譯 不連接

②將fun.o文件 打包生成libfun.a的靜態庫 ( ar crs libfun.a fun.o )

庫的命名:lib庫名.a使用靜態庫的方法:gcc test.c -o test -L . -lfun (注意,不需要再include 文件了)

-L:指定庫的路徑

-l:指定需要連接的庫的名字(lib 和 .a 之間的名字)

ar -t libfun.a 用來查看裡邊包含的庫文件

也可以直接加庫的完整路徑:gcc test.c -o test libfun.a

3. 動態庫的制作:

①生成目標文件:(fPIC:說明庫可以被加載到內存的任意位置)
[code]gcc -c -fPIC -Wall fun.c -o fun.o

[code]gcc -Wl,-soname,libfun.so -shared fun.o -o libfun.so.1
[code]-Wl,-soname,libfun.so:需要連接的庫libfun.so
libfun.so.1:實際生成的庫
庫的命名:lib庫名.so

③ln -s 絕對路徑/libfun.so.1 libfun.so

使用動態庫的方法:gcc test.c -o test -L . -lfun

如果出錯,可能要執行

3. 共享庫的加載方法:

①把動態庫放到/usr/lib或者/lib目錄下。 只需要將軟連接移動過去。

②將庫的路徑添加到系統環境變量中

LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH –查看

export LD_LIBRARY_PATH=/home/…路徑

③添加到配置文件中

/etc/ld.so.conf.d下的配置文件

sudo vi my.conf

添加庫的絕對路徑

④sudo ldconfig –重啟配置文件,如果本目錄下出問題,則換成上一目錄。

用戶id轉換成用戶名

struct passwd *getpwuid(uid_t);

passwd->

Copyright © Linux教程網 All Rights Reserved