亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 詳解Linux動態庫生成與使用指南

詳解Linux動態庫生成與使用指南

熱門標簽:智能外呼系統如何部署 蘭州語音電銷機器人軟件 高德地圖標注在建線路 電話機器人服務差 電銷機器人對公司貢獻 山東400電話如何辦理 ai電銷機器人 如何開發 濟源電話外呼系統怎么樣 宿州防封外呼系統廠家

Linux下動態庫文件的文件名形如 libxxx.so,其中so是 Shared Object 的縮寫,即可以共享的目標文件。

在鏈接動態庫生成可執行文件時,并不會把動態庫的代碼復制到執行文件中,而是在執行文件中記錄對動態庫的引用。

程序執行時,再去加載動態庫文件。如果動態庫已經加載,則不必重復加載,從而能節省內存空間。

Linux下生成和使用動態庫的步驟如下:

  • 編寫源文件。
  • 將一個或幾個源文件編譯鏈接,生成共享庫。
  • 通過 -L<path> -lxxx 的gcc選項鏈接生成的libxxx.so。
  • 把libxxx.so放入鏈接庫的標準路徑,或指定 LD_LIBRARY_PATH,才能運行鏈接了libxxx.so的程序。

下面通過實例詳細講解。

編寫源文件

建立一個源文件: max.c,代碼如下:

int max(int n1, int n2, int n3)
{
  int max_num = n1;
  max_num = max_num < n2? n2: max_num;
  max_num = max_num < n3? n3: max_num;
  return max_num;
}

編譯生成共享庫:

gcc -fPIC -shared -o libmax.so max.c

我們會得到libmax.so。

實際上上述過程分為編譯和鏈接兩步, -fPIC是編譯選項,PIC是 Position Independent Code 的縮寫,表示要生成位置無關的代碼,這是動態庫需要的特性; -shared是鏈接選項,告訴gcc生成動態庫而不是可執行文件。

上述的一行命令等同于:

gcc -c -fPIC max.c
gcc -shared -o libmax.so max.o

為動態庫編寫接口文件

為了讓用戶知道我們的動態庫中有哪些接口可用,我們需要編寫對應的頭文件。

建立 max.h ,輸入以下代碼:

#ifndef __MAX_H__
#define __MAX_H__

int max(int n1, int n2, int n3);

#endif

測試,鏈接動態庫生成可執行文件

建立一個使用max函數的test.c,代碼如下:

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

int main(int argc, char *argv[])
{
  int a = 10, b = -2, c = 100;
  printf("max among 10, -2 and 100 is %d.\n", max(a, b, c));
  return 0;
}

gcc test.c -L. -lmax 生成a.out,其中-lmax表示要鏈接libmax.so。

-L.表示搜索要鏈接的庫文件時包含當前路徑。

注意,如果同一目錄下同時存在同名的動態庫和靜態庫,比如 libmax.so 和 libmax.a 都在當前路徑下,
則gcc會優先鏈接動態庫。

運行

運行 ./a.out 會得到以下的錯誤提示。

./a.out: error while loading shared libraries: libmax.so: cannot open shared object file: No such file or directory

找不到libmax.so,原來Linux是通過 /etc/ld.so.cache 文件搜尋要鏈接的動態庫的。
而 /etc/ld.so.cache 是 ldconfig 程序讀取 /etc/ld.so.conf 文件生成的。
(注意, /etc/ld.so.conf 中并不必包含 /lib 和 /usr/lib,ldconfig程序會自動搜索這兩個目錄)

如果我們把 libmax.so 所在的路徑添加到 /etc/ld.so.conf 中,再以root權限運行 ldconfig 程序,更新 /etc/ld.so.cache ,a.out運行時,就可以找到 libmax.so。

但作為一個簡單的測試例子,讓我們改動系統的東西,似乎不太合適。

還有另一種簡單的方法,就是為a.out指定 LD_LIBRARY_PATH。

LD_LIBRARY_PATH=. ./a.out

程序就能正常運行了。LD_LIBRARY_PATH=. 是告訴 a.out,先在當前路徑尋找鏈接的動態庫。

對于elf格式的可執行程序,是由ld-linux.so*來完成的,它先后搜索elf文件的 DT_RPATH 段, 環境變量 LD_LIBRARY_PATH, /etc/ld.so.cache文件列表, /lib/,/usr/lib目錄, 找到庫文件后將其載入內存.

makefile讓工作自動化

編寫makefile,內容如下:

.PHONY: build test clean

build: libmax.so

libmax.so: max.o
 gcc -o $@ -shared $<

max.o: max.c
 gcc -c -fPIC $<

test: a.out

a.out: test.c libmax.so
 gcc test.c -L. -lmax
 LD_LIBRARY_PATH=. ./a.out

clean:
 rm -f *.o *.so a.out

make build就會生成libmax.so, make test就會生成a.out并執行,make clean會清理編譯和測試結果。

到此這篇關于詳解Linux動態庫生成與使用指南的文章就介紹到這了,更多相關Linux動態庫生成內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:畢節 巴中 南寧 衡水 晉中 云南 安陽 佛山

巨人網絡通訊聲明:本文標題《詳解Linux動態庫生成與使用指南》,本文關鍵詞  詳解,Linux,動態,庫,生成,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Linux動態庫生成與使用指南》相關的同類信息!
  • 本頁收集關于詳解Linux動態庫生成與使用指南的相關信息資訊供網民參考!
  • 推薦文章
    香蕉视频三级| 国产亚洲免费观看| 夜夜操天天爽| 国产福利免费观看| 四虎影视久久| 中文字幕一区二区三区精彩视频 | 青青久在线视频| 超级乱淫黄漫画免费| 国产美女在线观看| 99色视频在线观看| 免费一级片在线观看| 欧美一区二区三区性| 国产精品自拍在线观看| 欧美1区| 青青青草影院 | 欧美一区二区三区在线观看| 欧美a级成人淫片免费看| 国产高清视频免费观看| 国产不卡精品一区二区三区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 成人a级高清视频在线观看| 成人在激情在线视频| 亚欧成人毛片一区二区三区四区| 欧美18性精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久久国产精品自线拍免费| 四虎影视精品永久免费网站| 国产精品自拍在线观看| 麻豆午夜视频| 国产91精品一区| 国产成人精品综合在线| 精品视频在线看| 99色视频在线观看| 韩国三级香港三级日本三级la| 免费国产在线视频| 亚洲第一色在线| 九九精品久久| 天天做日日爱夜夜爽| 午夜欧美成人久久久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | a级精品九九九大片免费看| 亚洲精品影院久久久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 深夜做爰性大片中文| 日日日夜夜操| 夜夜操天天爽| 欧美激情一区二区三区中文字幕| 国产91精品一区二区| 成人免费一级纶理片| 精品国产三级a| 九九九在线视频| 久久精品欧美一区二区| 国产成人精品在线| 国产视频久久久久| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 青青青草视频在线观看| 午夜在线观看视频免费 成人| 日本伦理片网站| 99热精品一区| 欧美激情一区二区三区在线| 韩国毛片 免费| 久久精品免视看国产成人2021| 精品国产一区二区三区久久久蜜臀| 国产不卡在线观看| 国产韩国精品一区二区三区| 亚洲女人国产香蕉久久精品| 高清一级片| 免费国产在线观看| 日本免费乱理伦片在线观看2018| 精品国产一区二区三区久久久蜜臀| 欧美一区二区三区性| 四虎论坛| 国产高清视频免费| 一级片片| 国产精品自拍在线| 国产一区国产二区国产三区| 日韩av东京社区男人的天堂| 毛片电影网| 黄色福利| 韩国毛片基地| 精品在线免费播放| 国产视频一区在线| 国产精品免费久久| 日韩中文字幕在线亚洲一区| 欧美大片一区| 国产一区二区精品久久91| 二级片在线观看| 999精品在线| 色综合久久天天综合观看| 日本乱中文字幕系列| 97视频免费在线| 日韩在线观看免费| 午夜在线观看视频免费 成人| 国产一区精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 91麻豆精品国产高清在线| 国产一区免费观看| 亚洲女人国产香蕉久久精品 | 国产91精品系列在线观看| 99色视频在线| 国产网站麻豆精品视频| 日韩中文字幕一区| 91麻豆高清国产在线播放| 欧美国产日韩一区二区三区| 国产高清视频免费观看| 欧美激情一区二区三区视频 | 国产网站在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产麻豆精品| 欧美爱色| 亚欧乱色一区二区三区| 麻豆网站在线看| 亚欧乱色一区二区三区| 91麻豆高清国产在线播放| 欧美国产日韩一区二区三区| 香蕉视频久久| 精品国产一区二区三区精东影业| 欧美日本免费| 97视频免费在线| 精品国产一区二区三区久久久蜜臀| 青草国产在线| 国产福利免费视频| 亚欧成人乱码一区二区| 国产极品白嫩美女在线观看看| 国产91视频网| 成人免费观看男女羞羞视频 | 国产视频网站在线观看| 99久久精品国产麻豆| 青青青草影院| 欧美国产日韩一区二区三区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久久国产一久久高清| 日韩中文字幕一区二区不卡| 国产成人欧美一区二区三区的| 久久久久久久网| 午夜在线观看视频免费 成人| 亚洲 男人 天堂| 欧美日本免费| 亚洲天堂免费| 国产一区二区精品| 日韩一级黄色片| 国产极品精频在线观看| 国产欧美精品| 日本特黄一级| 国产91精品系列在线观看| 亚洲不卡一区二区三区在线 | 欧美激情一区二区三区视频 | 国产麻豆精品视频| 国产不卡精品一区二区三区| 四虎久久精品国产| 91麻豆高清国产在线播放| 国产成人精品一区二区视频| 日韩avdvd| 韩国毛片基地| 青草国产在线| 亚洲天堂免费观看| 四虎影视久久久| 国产不卡在线播放| 国产一区二区精品久久91| 国产成人精品综合久久久| 久久久成人影院| 欧美大片aaaa一级毛片| 欧美国产日韩久久久| 国产视频一区二区在线观看| 99色视频在线| 午夜激情视频在线观看| 精品国产一区二区三区精东影业| 国产一区二区精品| 二级片在线观看| 九九精品在线播放| 999久久66久6只有精品| 国产一区二区精品久| 欧美激情一区二区三区在线播放| 999精品在线| 一级片片| 久久99青青久久99久久| 午夜欧美福利| 韩国妈妈的朋友在线播放| 日韩专区在线播放| 精品久久久久久中文字幕一区 | 亚欧视频在线| 国产高清在线精品一区二区| 国产成人女人在线视频观看| 国产高清在线精品一区二区| 国产一级强片在线观看| 国产极品白嫩美女在线观看看| 日韩在线观看视频网站| 青青久在线视频| 色综合久久手机在线| 国产成人啪精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美爱爱动态| 欧美一级视频免费观看| 九九久久国产精品| 欧美激情伊人| 天天色色色| 欧美国产日韩久久久| 国产成人啪精品| 精品国产一区二区三区精东影业| 亚洲天堂在线播放|