婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解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動態庫生成與使用指南的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    麻豆国产精品视频| 日韩精品一区二区三区中文精品| 色系网站成人免费| 欧美一区二区观看视频| 亚洲欧美色图小说| 国产成人精品亚洲777人妖| 欧美变态tickle挠乳网站| 亚洲九九爱视频| www.亚洲色图| 欧美经典三级视频一区二区三区| 日韩电影免费一区| 在线播放日韩导航| 亚洲欧美一区二区三区极速播放| 成人免费黄色大片| 欧美国产在线观看| 成人a区在线观看| 日韩一区欧美小说| 99久久精品免费看| 亚洲精品伦理在线| 欧美日韩久久一区二区| 五月天欧美精品| 91精品国产福利在线观看| 日韩成人午夜电影| 精品国产精品一区二区夜夜嗨| 精品影视av免费| 国产天堂亚洲国产碰碰| 春色校园综合激情亚洲| 国产精品欧美精品| 91福利在线播放| 亚洲成av人**亚洲成av**| 欧美亚洲愉拍一区二区| 日日夜夜免费精品视频| 日韩欧美国产综合一区 | 亚洲国产综合色| 欧美理论片在线| 久久se精品一区精品二区| 久久久久久夜精品精品免费| 国产福利91精品一区二区三区| 久久久美女艺术照精彩视频福利播放| 国产成人在线免费观看| 国产精品久久久久久久久图文区 | 国产精品成人免费精品自在线观看| 六月婷婷色综合| 亚洲国产成人在线| 93久久精品日日躁夜夜躁欧美| 亚洲精品美腿丝袜| 91亚洲大成网污www| 一区二区三区免费看视频| 7777精品伊人久久久大香线蕉超级流畅 | 欧美日韩在线播放三区| 亚洲一区在线电影| 欧美日韩午夜在线| 久久99精品久久久久婷婷| 欧美激情一区在线观看| 在线看日本不卡| 久久99精品国产麻豆不卡| 久久精品一区二区三区不卡牛牛| 久久97超碰国产精品超碰| 国产无一区二区| 色综合欧美在线视频区| 精品午夜久久福利影院| 国产日韩亚洲欧美综合| 在线日韩国产精品| 国产在线精品不卡| 亚洲一区二区在线播放相泽| 精品国产一区二区三区不卡| 91在线观看一区二区| 亚洲成a人片综合在线| 国产午夜精品久久| 色婷婷久久一区二区三区麻豆| 亚洲国产裸拍裸体视频在线观看乱了| 日韩一区和二区| 91视频在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 男人的j进女人的j一区| 久久久久久久综合色一本| 在线一区二区三区做爰视频网站| 日本在线不卡视频一二三区| 国产精品盗摄一区二区三区| 7777精品伊人久久久大香线蕉的 | 精品一区中文字幕| 亚洲女人的天堂| 久久综合色鬼综合色| 欧美性大战久久久久久久蜜臀| 九九精品一区二区| 欧美精品黑人性xxxx| 成人免费精品视频| 精品亚洲成a人| 日韩精品欧美精品| 一区二区三区成人| 亚洲欧美日韩久久| 亚洲国产电影在线观看| 久久一二三国产| 精品久久久久久综合日本欧美| 欧洲国内综合视频| 色婷婷久久一区二区三区麻豆| 不卡视频免费播放| 国产精品99久久久久久宅男| 久久99精品国产91久久来源| 日韩影视精彩在线| 亚洲高清不卡在线| 亚洲va欧美va国产va天堂影院| 成人免费在线播放视频| 国产区在线观看成人精品| 久久精品一区二区三区四区| 亚洲精品在线观看网站| 欧美大白屁股肥臀xxxxxx| 日韩精品专区在线影院重磅| 欧美一级视频精品观看| 日韩亚洲欧美一区| 欧美一二三四在线| 色婷婷久久一区二区三区麻豆| 成人自拍视频在线| 国产激情视频一区二区三区欧美 | 久久国产欧美日韩精品| 男男视频亚洲欧美| 精品系列免费在线观看| 国产一区二区三区精品欧美日韩一区二区三区| 奇米影视一区二区三区| 国产一区二区在线观看免费| 国产精品亚洲第一| 99视频有精品| 91亚洲永久精品| 欧美图区在线视频| 日韩一区二区在线观看视频播放| 欧美精品久久一区| 久久久精品免费免费| 精品美女在线观看| 久久久精品蜜桃| 综合婷婷亚洲小说| 一区二区在线观看视频| 亚瑟在线精品视频| 免费久久99精品国产| 国产一区二区视频在线| 97精品电影院| 欧美老肥妇做.爰bbww视频| 色婷婷国产精品| 3d成人动漫网站| 日韩一区二区三| 精品久久久久久最新网址| 国产精品美女久久久久av爽李琼| 亚洲精品国产视频| 久草热8精品视频在线观看| 成人动漫一区二区三区| 欧美日精品一区视频| 国产清纯美女被跳蛋高潮一区二区久久w| 久久久久久久电影| |精品福利一区二区三区| 日精品一区二区| 美女视频黄免费的久久| 风间由美一区二区av101| 欧美日韩小视频| 欧美videofree性高清杂交| 亚洲色图视频网站| 亚洲欧美另类图片小说| 免费在线欧美视频| 色婷婷久久综合| 成人福利在线看| 麻豆传媒一区二区三区| 99久久国产免费看| 欧美日韩日日夜夜| 久久久久久久久久久电影| 久久这里都是精品| 久久久欧美精品sm网站| 亚洲成在线观看| 国产美女精品一区二区三区| 在线观看国产日韩| 日韩免费看网站| 国产精品素人视频| 天天做天天摸天天爽国产一区| 粉嫩aⅴ一区二区三区四区五区| av在线播放一区二区三区| 7777精品伊人久久久大香线蕉 | 精品国产乱码久久久久久图片| 午夜精品福利视频网站| 国产高清精品久久久久| 国产福利一区在线| 欧美日韩aaa| 中文字幕一区二区三区在线不卡 | 欧美欧美欧美欧美首页| 日韩精品一区二区三区视频在线观看 | 亚洲精品午夜久久久| 国产福利一区二区三区视频| 91视视频在线观看入口直接观看www | 国产精品久久久久久户外露出| 久久99精品久久只有精品| 91精品麻豆日日躁夜夜躁| 亚洲精品国产精华液| 亚洲欧美一区二区久久| 成人动漫av在线| 国产午夜精品久久久久久免费视 | 91在线观看视频| 国产精品久久久一本精品| 美女网站在线免费欧美精品| 欧美日韩中文国产| 午夜亚洲国产au精品一区二区| 欧美综合天天夜夜久久| 亚洲综合在线免费观看| 色婷婷激情一区二区三区| 亚洲女爱视频在线|