假設現在有這些文件:sub.c add.c div.c mul.c mainc head.h(前4個.C文件的頭文件)
1.靜態庫制作流程
? ? ? ? gcc -c ?sub.c add.c div.c mul.c ? ? ? ? ? ? ? -->生成 .o目標文件文件
? ? ? ? ar rcs ?libmycal.a ?*.o ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-->生成.a靜態庫文件(靜態庫的名字構成:lib+你要做的庫+.a)
2.調用靜態庫流程
? ? ? ?方法1) gcc ?main.c -I(大寫的i) ?./ ?libmycal.a -o ?sum ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -->生成可執行文件 sum?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? -->(具體格式:gcc+main函數+-I(頭文件路徑)+靜態庫+(-o+指定生成可執行文件名字)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (括號內的可以不加,默認生成a.out文件? )? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ./sum ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -->得到計算結果?
? ? ? 方法 2)gcc ?main.c -L ./ ?-l(小寫的L) mycal ?-I(大寫的i) ./ -o sum ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-->具體格式:-L+后面接靜態庫的路徑 ?-l+接靜態庫的名字(你自己定義的庫的名字)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-I+頭文件路徑 -o+指定生成的可執行文件 (同上)
? ? ? ? ? ? ? ? ./sum
3.動態庫的制作流程:
? ? ? ? gcc -fPIC ?sub.c add.c div.c mul.c ? ? ? ? ? ? ? -->生成 .o目標文件文件
? ? ? ? gcc -shared -o libmycal.so *.o ? ? ? ? ? ? ? ? ? ?-->生成動態庫.so文件
4.調用動態庫
? ? ? ?gcc main.c -L ./ ?-l mycal -I ./ -o sum ? ? ? ? ?-->出現調用失敗
5.調用失敗的原因:
? ? ? ?沒有讓main.c和動態庫建立連接;
6.解決辦法
? ? ? ?方法1:使用臨時的動態庫環境變量連接:export LD_LIBRARY_PATH=./(動態庫所在目錄) ? 重啟linux之后失效
? ? ? ?方法2:用vi/vim打開動態庫配置文件:vim /etc/ld.so.conf ? ?在文本中添加動態庫的絕對路徑 ? 然后再用 sudo(使用root權限)idconfig (-v顯示更新信息)更新即可 ?永久有效