程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 陳詞濫調C說話靜態函數庫的制造和應用(推舉)

陳詞濫調C說話靜態函數庫的制造和應用(推舉)

編輯:關於C++

陳詞濫調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說話靜態函數庫的制造和應用(推舉)就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved