陳詞濫調C說話靜態函數庫的制造和應用(推舉)。本站提示廣大學習愛好者:(陳詞濫調C說話靜態函數庫的制造和應用(推舉))文章只能為提供參考,不一定能成為您想要的結果。以下是陳詞濫調C說話靜態函數庫的制造和應用(推舉)正文
>>>>>>陳詞濫調C說話接靜態函數庫的制造和應用>>點擊進入
2 靜態函數庫的制造和應用
動態函數庫的制造步調可以用下圖來描寫,詳細包含
(1) 編寫函數的.c文件(例如add.c、sub.c、mul.c和div.c)
(2) 編寫Makefile,然後make,完成函數的編譯和歸檔入庫
函數的編譯:應用gcc –c add.c -fPIC只編譯不鏈接函數.c文件,分離生成函數的目的文件(例如add.o、sub.o、mul.o和div.o)。
函數的歸檔入庫:應用gcc -o libdynamic.so $(objects) -share將目的文件歸檔入庫。
(3) 編寫頭文件(例如kud.h),聲明函數庫中一切函數,目標是kudmain.c函數#include頭文件後,可以挪用響應的函數,至此,完成函數庫的制造
2.1 靜態函數庫的制造示例
示例的內容樹立靜態函數庫libdynamic.so,庫中包含add、sub、mul和div函數,然後在kudmain.c函數中援用這4個函數,完成兩個整數的加減乘除,全部文件的構造是
(1) 編寫函數的.c文件
采取制造靜態函數庫時的4個函數文件add.c、sub.c、mul.c和div.c,不做任何修改。
(2) 編寫頭文件
將制造靜態函數庫時的頭文件名ku.h改成kud.h,其他內容不做任何修改。
(3) 編寫Makefile
因為制造靜態庫的敕令和制造靜態庫的敕令存在差別,是以須要修正Makefile。
objects = add.o sub.o mul.o div.o libdynamic.so : $(objects) gcc -o libdynamic.so $(objects) -shared add.o : add.c gcc -c add.c -fPIC sub.o : sub.c gcc -c sub.c -fPIC mul.o : mul.c gcc -c mul.c -fPIC div.o : div.c gcc -c div.c -fPIC clean : rm libdynamic.so $(objects)
(4) 應用make編譯.c文件,生成.o文件,歸檔.o文件到函數庫libdynamic.so中,完成靜態函數庫的制造。
2.2 靜態函數庫的應用
(1)編寫kudmain.c,挪用libdynamic.so中的add、sub、mul和div函數
#include <stdio.h> #include "kud.h" int main (void) { int a,b; a = 10; b = 3; printf("a = %d.\nb = %d.\n",a,b); printf("static a+b = %f.\n",add(a,b)); printf("static a-b = %f.\n",sub(a,b)); printf("static a*b = %f.\n",mul(a,b)); printf("static a/b = %f.\n",div(a,b)); return 0; }
(2) 應用gcc kudmain.c –o kudmain.o –L ./ku2 –ldynamic 編譯kudmain.c文件,運轉./kudmain.o檢查運轉成果,成果湧現ERROR,緣由是法式運轉load靜態函數庫時,找不到該函數庫。
(3) 處理辦法
辦法1:將libdynamic.so放到/usr/lib目次下,履行cp kud2/libdynamic.so /usr/lib,然後運轉./kudmain.o,法式運轉正常,成績獲得處理。
辦法2:應用情況變量LD_LIBRARY_PATH,法式運轉load靜態函數庫時,會先在LD_LIBRARY_PATH指定的目次下查找函數庫,找不到就再去/usr/lib下查找,履行export LD_LIBRARY_PATH=/mnt/hgfs/winshare/kud/kud2:$LD_LIBRARY_PATH,然後運轉./kudmain.o,法式運轉正常,成績獲得處理。
2.3 應用ldd敕令檢查依附關系
ldd敕令是一個shell劇本,不是一個可履行法式,用於檢查某個可履行法式含有甚麼靜態函數庫,也即該法式履行時依附於哪些靜態函數庫。
$ldd kudmain.o //可見kudmain.o依附於libdynamic.so
以上這篇陳詞濫調C說話靜態函數庫的制造和應用(推舉)就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。