www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]Linux下靜態(tài)庫和動態(tài)庫(共享庫)的制作與使用

Linux操作系統(tǒng)支持的函數(shù)庫分為靜態(tài)庫和動態(tài)庫,動態(tài)庫又稱共享庫。linux系統(tǒng)有幾個重要的目錄存放相應(yīng)的函數(shù)庫,如/lib /usr/lib。

靜態(tài)函數(shù)庫:
  這類庫的名字一般是libxxx.a;利用靜態(tài)函數(shù)庫編譯成的文件比較大,因為整個函數(shù)庫的所有數(shù)據(jù)都會被整合進目標代碼中,他的優(yōu)點就顯而易見了,即編譯后的執(zhí)行程序不需要外部的函數(shù)庫支持,因為所有使用的函數(shù)都已經(jīng)被編譯進可執(zhí)行文件了。當然這也會成為他的缺點,因為如果靜態(tài)函數(shù)庫改變了,那么你的程序必須重新編譯,而且體積也較大。

動態(tài)函數(shù)庫:
  這類庫的名字一般是libxxx.so,動態(tài)庫又稱共享庫;相對于靜態(tài)函數(shù)庫,動態(tài)函數(shù)庫在編譯的時候并沒有被編譯進目標代碼中,你的程序執(zhí)行到相關(guān)函數(shù)時才調(diào)用該函數(shù)庫里的相應(yīng)函數(shù),因此動態(tài)函數(shù)庫所產(chǎn)生的可執(zhí)行文件比較小。由于函數(shù)庫沒有被整合進你的程序,而是程序運行時動態(tài)的申請并調(diào)用,所以程序的運行環(huán)境中必須提供相應(yīng)的庫。動態(tài)函數(shù)庫的改變并不影響你的程序,所以動態(tài)函數(shù)庫的升級比較方便。而且如果多個應(yīng)用程序都要使用同一函數(shù)庫,動態(tài)庫就非常適合,可以減小應(yīng)用程序的體積。

下面來介紹linux靜態(tài)函數(shù)庫的創(chuàng)建和使用:

  例程add.h add.c sub.h
sub.c
main.c:


  add.h

  #ifndef ADD_H
  #define ADD_H
  int add(int x,int y);
  #endif

  add.c

  #include <stdio.h>
  #include "add.h"

int add(int x,int y)
{
  
return (x+y);

}
--------------------------------------------------------------------

sub.h


  #ifndef SUB_H
  #define SUB_H
  int sub(int x,int y);
  #endif

  sub.c

  #include <stdio.h>
  #include "sub.h"
int sub(int x,int y)
{
  
return (x-y);

  }
-----------------------------------------------------------------------
main.c

#include <stdio.h>
  #include "sub.h"
#include "add.h"

  int main()
{

int
a,b;


a = add(1,2);


b = sub(10,5);

[!--empirenews.page--]


printf(“a=%d,b=%dn”,a,b);

    return 0;
  }
-----------------------------------------------------------------------
  不管是靜態(tài)函數(shù)庫還是動態(tài)函數(shù)庫,都是由*.o目標文件生成。

所以先 gcc -c add.c

gcc -c sub.c

生成add.o
sub.o


  靜態(tài)函數(shù)庫由ar命令創(chuàng)建

  本例:ar -cr libaddsub.a add.o sub.o

  -c create的意思

  -r replace的意思,表示當插入的模塊名已經(jīng)在庫中存在,則替換同名的模塊。如果若干模塊中有一個模塊在庫中不存在,ar顯示一個錯誤消息,并不替換其他同名模塊。默認的情況下,新的成員增加在庫的結(jié)尾處,可以使用其他任選項來改變增加的位置。
  到此靜態(tài)函數(shù)庫創(chuàng)建完畢。

  使用方法:通過gcc -o main main.c -L. -laddsub編譯main.c就會把靜態(tài)函數(shù)庫整合進main。

  其中

  -L指定靜態(tài)函數(shù)庫的位置供查找,注意L后面還有'.',表示靜態(tài)函數(shù)庫在本目錄下查找。

  -l則指定了靜態(tài)函數(shù)庫名,由于靜態(tài)函數(shù)庫的命名方式是lib***.a,其中的lib和.a忽略。

  根據(jù)靜態(tài)函數(shù)庫的特性,此處刪除libaddsub.a后main依然可以運行,因為靜態(tài)庫的內(nèi)容已經(jīng)整合進去了。

  動態(tài)函數(shù)庫的創(chuàng)建和使用

gcc -shared -fpic -o libaddsub.so
add.c sub.c


-fpic:產(chǎn)生位置無關(guān)代碼
-shared:生成共享庫

用上述命令生成libaddsub.so 動態(tài)函數(shù)庫。

  gcc -o out main.c -L. -laddsub

  此時還不能立即./out,因為在動態(tài)函數(shù)庫使用時,會查找/usr/lib /lib目錄下的動態(tài)函數(shù)庫,而此時我們生成的庫不在里邊。

  這個時候有好幾種方法可以讓他成功運行:

  最直接最簡單的方法就是把libaddsub.so拉到/usr/lib 或/lib中去。


還有一種方法,假設(shè)libaddsub.so在/home/linux/addsub

export LD_LIBRARY_PATH=/home/linux/addsub
:$LD_LIBRARY_PATH


  另外還可以在/etc/ld.so.conf文件里加入我們生成的庫的目錄,然后/sbin/ldconfig。
/etc/ld.so.conf是非常重要的一個目錄,里面存放的是鏈接器和加載器搜索共享庫時要檢查的目錄,默認是從/usr/lib /lib中讀取的,所以想要順利運行,我們也可以把我們庫的目錄加入到這個文件中并執(zhí)行/sbin/ldconfig。
 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

Linux電腦輸入poweroff退出操作系統(tǒng)后電源會自動切斷,而嵌入式Linux如果沒做特殊處理 輸入poweroff關(guān)閉系統(tǒng)后電源依舊保持著。敲擊鍵盤也不會有響應(yīng)。原因是CPU和主板之間有著行業(yè)標準,比如ACPI(A...

關(guān)鍵字: Linux 電源 硬件IO

幾乎一直到DXP甚至后來的AD時代,3D封裝模型技術(shù)才開始慢慢日趨成熟,自此3D封裝的發(fā)展完美的解決了這個問題,3D封裝能夠讓我們在設(shè)計之前就能夠看到真實的3D模型,很多器件空間比如長寬高,甚至在一些中空的地方下面擺一些...

關(guān)鍵字: DXP AD 3D封裝

AD軟件有自帶制作簡單的3D元件體用于3D PCB封裝中下面以0603C封裝為例進行簡單介紹。

關(guān)鍵字: AD 3D元件體 0603C封裝

學習Linux動態(tài)鏈接庫是一個繞不開的話題,我們今天就一起來看一下什么是動態(tài)鏈接庫、動態(tài)鏈接庫有什么好處、如何編譯出一個動態(tài)鏈接庫等幾個關(guān)于動態(tài)鏈接庫的幾個基本概念,廢話少說咱們直接開始

關(guān)鍵字: Linux 靜態(tài)鏈接庫 動態(tài)鏈接庫

借助 Adyen 的支付業(yè)務(wù)能力,SHOPLINE 能夠簡化并整合運營,輕松擴展業(yè)務(wù),并提供寶貴的消費者洞察。 新加坡2022年9月28日 /美通社/ -- 服務(wù)眾多領(lǐng)先企業(yè)的全球金融科技平臺 Adyen(AMS:...

關(guān)鍵字: 智能電 AD 新加坡 PLATFORMS

新澤西州皮斯卡托威 2022年9月23日 /美通社/ -- 致力于推動技術(shù)進步、造福人類的全球最大專業(yè)技術(shù)組織IEEE今天宣布,Sophia Muirhead將成為...

關(guān)鍵字: IEEE UI AD TE

在Linux內(nèi)核中,提供了一個用來創(chuàng)建雙向循環(huán)鏈表的結(jié)構(gòu) list_head。雖然linux內(nèi)核是用C語言寫的,但是list_head的引入,使得內(nèi)核數(shù)據(jù)結(jié)構(gòu)也可以擁有面向?qū)ο蟮奶匦?,通過使用操作list_head 的通...

關(guān)鍵字: Linux 內(nèi)核鏈表

(全球TMT2022年9月15日訊)IBM于美國東部時間9月13日發(fā)布其下一代LinuxONE服務(wù)器,這是一個具有高度擴展性的基于Linux和Kubernetes的平臺,旨在為企業(yè)提供所需的可擴展性,使其能用一個單一系...

關(guān)鍵字: IBM Linux NET 可擴展性

北京2022年9月14日 /美通社/ -- 在剛剛結(jié)束的2022年中國國際服務(wù)貿(mào)易交易會(簡稱"服貿(mào)會")上,一大批高科技企業(yè)展示了他們的數(shù)字技術(shù)和產(chǎn)品,數(shù)字服務(wù)貿(mào)易創(chuàng)新發(fā)展迎來先機。 Visito...

關(guān)鍵字: 機器人 SERVICES CHINA AD

下一代LinuxONE服務(wù)器擴展了IBM幫助行業(yè)客戶實現(xiàn)可持續(xù)目標的能力,花旗銀行就是很好的例子 北京2022年9月14日 /美通社/ -- IBM(紐約證券交易所:IBM)于美國東部時間9月13日發(fā)布其下一...

關(guān)鍵字: IBM Linux X86 數(shù)據(jù)中心

嵌入式軟件

15715 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉