靜態庫與動態庫相關知識筆記

2022-03-31 18:02:29 字數 839 閱讀 7075

1. ldd 可檢視程式需要哪些動態庫

nm 可檢視程式,庫里有哪些函式

file 可檢視檔案的型別

objdump -d 反彙編.o/.a/.so/elf可執行檔案

2. 製作靜態庫 (test1.c test2.c)

gcc test1.c -c -o test1.o

gcc test2.c -c -o test2.o

ar -cr libmy.a test1.o test2.o

使用:gcc test.c ./libmy.a -i 標頭檔案的所在路徑

或者gcc test.c -l 庫所在路徑 -lmy -i 標頭檔案的所在路徑

3. 製作動態庫(test1.c test2.c)

gcc test1.c test2.c -shared -fpic -o libmylib.so

使用:gcc test.c ./libmylib.so

或者gcc test.c -l 庫所在路徑 -lmylib

庫發布:

把庫複製到/lib/ 或者 /usr/lib

或者: export ld_library_path=庫所在路徑

vim /etc/ld.so.conf

增加庫所在的絕對路徑

ldconfig

4. 手動載入動態庫 gcc test.c -ldl

handle = dlopen(庫路徑檔名, rtld_lazy);

dlsym(handle, "函式名"); //返回函式的位址

dlclose(handle);

gcc -rdynamic test.c -o test -ldl

靜態庫與動態庫

linux下靜態庫 a 的例子 mylib.h 位於include資料夾下 ifndef mylib h define mylib h int add int a,int b endif mylib.cpp 位於lib資料夾中 include mylib.h int add int a,int b ...

靜態庫與動態庫

庫本質上是一種可執行的二進位制 可以被作業系統載入 linux和windows的庫是不相容的 庫可以分為靜態塊和動態庫,二者的不同點在於 被載入的時刻不同。靜態庫 在程式編譯時會被連線到目標 中,程式執行時不再需要改靜態庫,體積較大,一般應用與移植過程中在宿主機上編譯的 靜態庫檔名的命名規範是以li...

靜態庫與動態庫

1.靜態庫 工程在呼叫靜態庫時,複製靜態庫,源 加長,不節省程式空間。字尾名.a 優點 程式設計後不需要再依賴庫 以空間換時間 建立靜態庫 gcc c 原始檔.c ar rcs rcu 靜態庫名 目標檔案1 目標檔案2 rc 靜態庫不存在,就建立該庫檔案 s 更新靜態庫 使用 gcc o file ...