假設在math目錄下已編輯好add.c sub.c div.c mul.c func_point.c文件,func_point.c為包含main()的源文件!
動態庫的制作:
方法一:
gcc -c -fPIC add.c sub.c div.c mul.c //-c表示生成.o目標文件,-f后加一些編譯選項,PIC表示與位置無關gcc -shared -o libmymath.so add.o sub.o mul.o div.o//創建共享庫mymath,添加add.o,sub.o,mul.o,div.o目標文件sudo mv libmymath.so /usr/libgcc func_point.c -lmymath//-l后面加動態鏈接庫名字
方法二:
gcc -c -fPIC add.c sub.c div.c mul.c //-c:生成.o目標文件,-f后加一些編譯選項,PIC表示與位置無關gcc -shared -o libmymath.so add.o sub.o mul.o div.o//創建共享庫mymath,添加add.o,sub.o mul.o div.o目標文件export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.//注意此操作后把當前目錄加入環境變量中gcc func_point.c -L. -lmymath//-l后面加動態鏈接庫名字
方法三:
gcc -c -fPIC add.c sub.c div.c mul.c //-c:生成.o目標文件,-f后加一些編譯選項,PIC表示與位置無關gcc -shared -o libmymath.so add.o sub.o mul.o div.o//創建共享庫mymath,添加add.o,sub.o mul.o div.o目標文件sudo vi /etc/ld.so.conf//把你的動態庫路徑加入此文件中sudo ldconfiggcc func_point.c -L. -lmymath//-l后面加動態鏈接庫名字
ldd 顯示可執行程序所需的共享庫。
定義好框架,不斷增加動態庫!!
靜態庫制作:
ar -crs libmymath.a add.o sub.o div.o mul.o/*創建靜態庫mymath,添加add.o,sub.o,mul.o,div.o,-c:創建歸檔文件 -r:插入 -s:若歸檔文件中包含了對象模式,可利用此參數建立備存文件的符號表 ar -crs libmymath.a *.o */
gcc func_point.c -L. -lmymath//-L在哪個目錄下找庫 -l找哪個庫,-lm可以鏈接到標準算數庫,-lpthread可以連接到Linux標準線程庫
ar -d libmymath.a add.o//刪除一個
ar -r libmymath.a add.o//增加一個
靜態庫在程序鏈接時用到,鏈接器把程序所需的代碼從靜態庫中拷貝到可執行程序中,可執行程序會增大;動態庫在程序加載時用到,程序在加載時,會先檢查需要哪些動態庫連接,然后從內存中找到這些動態庫的地址,最后加載動態庫運行程序。
以上這篇淺談Linux C語言動態庫及靜態庫就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答