[code]本質上來說是一種可執行代碼的二進制形式。linux下的庫有兩種:靜態庫和動態庫(共享庫)
[code]在程序編譯時被連接到目標代碼中,程序運行時,將不再需要該靜態庫,因此體積較大。優點:程序運行時將不再需要該靜態庫
缺點:可執行文件的體積變大。
後綴是 .a
[code]編譯時不連接到代碼中,在運行時才載入,因此程序運行時還需要動態庫存在,因此代碼體積較小。
優點:在程序運行時才被載入內存中。
缺點:程序運行時,需要動態庫存在。
後綴是 .so
①生成目標文件( 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
[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
如果出錯,可能要執行
②將庫的路徑添加到系統環境變量中
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->