亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gcc庫.txt

?? autoconf automake實例gcc編譯java方法.txt
?? TXT
字號:
一、庫文件簡介

簡單地說,庫(Library)就是一組已經寫好了的函數和變量、經過編譯代碼,是為了能夠提高開發效率和運行效率而設計的。庫分為靜態庫(Static Library)和共享庫(Shared library)兩類。靜態庫文件的擴展名是.a,共享庫文件的擴展名是.so(在CYGWIN環境下,分別叫做.o和.dll)。共享庫現在常常被叫做動態庫,是由于很多人借用了MS Windows的DLL(Dynamic Linked Library)這個詞。

(1)靜態庫

靜態是指每個用到該庫的應用程序都擁有一份自己的庫拷貝;應用程序運行的時候,即使將庫刪除也沒有問題,因為應用程序自己已經有了自己的拷貝。

(2)共享庫

一個共享庫有可能被多個所有應用程序共享。因此,對每個應用程序來說,即使不再使用某個共享庫,也不應將其刪除。此外,應用程序需要正確的環境變量設置(LD_LIBRARY_PATH),從而找到共享庫所在的位置,否則,應用程序運行時會報告找不到這個庫。

二、關于使用庫的問題

如果庫是已經編譯好的,那么如何在開發、運行應用程序時使用呢?

頭文件和庫文件所在的路徑,必須通過適當的方式通知給編譯器、鏈接器和相關的應用程序。

對于靜態庫來說,主要涉及開發工具,如gcc。例如,用gcc編譯、鏈接時,需要通過適當的路徑找到頭文件和靜態庫文件;實現的方法有兩種:

gcc的命令行參數(-I, -L)
shell的環境變量(C_INCLUDE_PATH, LIBRARY_PATH)

對于共享庫來說,程序在運行時,如果用到了動態庫,也需要找到對應的動態庫文件;實現的方法:

        shell的環境變量(LD_LIBRARY_PATH)

1)        gcc命令行參數(-I, -L)

默認情況下,gcc會自動搜索下面的路徑:

對頭文件:
/usr/local/include/
/usr/include/
對庫文件:
/usr/local/lib/
/usr/lib/

但是由于系統管理員對系統安裝路徑有不同的配置,或者對于如64位系統等情況,上述路徑對于一臺具體的計算機來說可能不同。

如果開發者還有自己工程所需的頭文件和庫文件,就要用gcc的-I和-L來指定對應的路徑。如果需要鏈接庫,還要用-l選項。

例如:如果工程涉及到GDBM(GNU DataBase Management)包,需要libgdbm庫,而系統中安裝GDBM的路徑是:

頭文件:/opt/gdbm-1.8.3/include
庫文件:/opt/gdbm-1.8.3/lib/

那么,gcc的命令參數是:

$gcc … -I/opt/gdbm-1.8.3/include -L/opt/gdbm-1.8.3/lib –lgdbm

注意:為保證兼容性,必須堅決杜絕在C/C++源文件的#include語句中或者其他相關語句中使用上述路徑。

2)        shell環境變量(Environmental Variable)

除了用命令行參數,還可以用環境變量來指示gcc搜索適當的路徑。而由于Shell的不同,環境變量的設置方法也不同。常用的Shell有Bash, Csh和Tcsh。

(1)Bash

對于Bash來說,除了由系統管理員配置的內容以外,每個用戶的用戶目錄($HOME)下,有一個.bash_profile文件。可在該文件內,增加下面的兩個語句來設置GDBM頭文件路徑的環境變量:

C_INCLUDE_PATH=/opt/gdbm-1.8.3/include
export C_INCLUDE_PATH

類似地,在該文件內用下面的兩個語句來設置庫文件路徑的環境變量:

LIBRARY_PATH=/opt/gdbm-1.8.3/lib
export LIBRARY_PATH

在.bash_profile中有了上述語句以后,就不用再使用-I和-L來搜索特定包的路徑了。但是鏈接庫的時候,還是要用-l選項。

$gcc … –lgdbm

在Bash下,要檢查有什么樣的環境變量,可用env命令。

$env

(2)Csh和Tcsh

如果是Csh或Tcsh,對環境變量的設置方法就不同了。在用戶的($HOME)目錄下,相關的一些文件如下:

.cshrc        每次進入Csh時的啟動(Startup)文件
.tcshrc        每次進入Tcsh時的啟動(Startup)文件(在Tcsh下,如果沒有這個文件,系統會用.cshrc文件代替)
.login        每次登錄Shell時的啟動(Startup)文件

在Csh和Tcsh下,分為Shell變量和環境變量;前者是用來設置Shell本身的,而后者則是供其他程序使用的。一般習慣是:Shell變量在.cshrc中定義,而環境變量則在.login文件中定義。

定義Shell變量的方法是在.cshrc或.tcshrc中用set語句:

        set history = 20

定義環境變量的方法是在.login文件中用setenv語句。對于上面關于GDBM的例子:

setenv C_INCLUDE_PATH /opt/gdbm-1.8.3/include
setenv LIBRARY_PATH /opt/gdbm-1.8.3/lib

在Csh和Tcsh下,可以用setenv命令來查看設置了哪些環境變量(如果要看Shell變量,要用set命令)。

注意:

-        設置Shell變量時要用“=”號;
-        設置環境變量時,變量名與實際值(這里是真實路徑)之間沒有“=”號;
-        不需要export。

3)        使用共享庫

使用共享庫的應用程序,要通過環境變量LD_LIBRARY_PATH找到對應的共享庫文件。與其他環境變量一樣,對LD_LIBRARY_PATH也要根據shell的種類和庫文件的實際路徑進行設置。但是,必須注意的是,與一般的環境變量不同,LD_LIBRARY_PATH的值,是已經安裝了的所有共享庫的路徑,因此,在Bash下,不能簡單地用下面的辦法:

LD_LIBRARY_PATH=/opt/gdbm-1.8.3/lib        錯誤!
export LD_LIBRARY_PATH

而必須用:

LD_LIBRARY_PATH=/opt/gdbm-1.8.3/libLD_LIBRARY_PATH
export LD_LIBRARY_PATH

這樣,就把其他共享庫的路徑也一起加入進來了。同樣地,在Csh和Tcsh下,

setenv LD_LIBRARY_PATH /opt/gdbm-1.8.3/libLD_LIBRARY_PATH

三、關于庫生成的問題

(1)靜態庫

簡單地說,靜態庫是一個目標文件的簡單集合。因此,首先要解決目標文件。

第一步:將各函數代碼所在的源文件編譯成目錄文件。
例如,對于myfunc.c, myproc.c

gcc -c myfunc.c myproc.c

將得到myfunc.o和myproc.o。

第二步:由ar(archive,歸檔的意思)把多個目標文件集合起來。

$ar -r libmyjob.a myfunc.o myproc.o

通常,靜態庫的命名方式應遵守libXXXXX.a格式。應用程序在使用靜態庫的時候,通常只需要把命名中的XXXXX部分傳遞給gcc即可。例如:

$gcc –o mywork –lmyjob …

意為讓gcc(實際上是gcc調用ld)去連接一個名字為libmyjob.a(或者libmyjob.so)的庫。如果庫的命名不遵循libXXXXX.a的格式就找不到相應文件。

(2)共享庫

共享庫的構造復雜一些,通常是一個ELF格式的文件。可以有三種方法生成: 

$ld -G 
$gcc -shared
$libtool 

用ld最復雜,用gcc -share就簡單的多,但是-share并非在任何平臺都可以使用。GNU提供了一個更好的工具libtool,專門用來在各種平臺上生成各種庫。 

用gcc的-shared參數:

        gcc –shared –o libmyjob.so myjob.o

這樣,就通過myjob.o生成了共享庫文件libmyjob.so。

特別地,在CYGWIN環境下,仍需要輸出符合Windows命名的共享庫(動態庫),即libXXXXX.dll。如:

gcc –shared –o libmyjob.dll myjob.o        

(3)庫生成以后的配置

如果要把自己開發的庫文件安裝到操作系統中,需要有管理員權限:

(a)        把庫文件復制到適當的目錄:

可以把自己開發的動態連接庫放到/usr/local/lib(或者/usr/lib),或放到其他目錄,但不論放在那里,都必須與LIBRARY_PATH的值、LD_LIBRARY_PATH的值相一致。

(b)        修改相關的系統配置文件:

修改/etc/ld.so.conf,然后利用/sbin/ldconfig來完成。

[全文結束] 

ar 庫文件制作/維護工具

Usage: ar [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...
       ar -M [<mri-script]
 commands:
  d    刪除文件        - delete file(s) from the archive
  m[ab]    移動文件    - move file(s) in the archive
  p        打印特定文件    - print file(s) found in the archive
  q[f]     追加文件    - quick append file(s) to the archive
  r[ab][f][u]  替代文件- replace existing or insert new file(s) into the archive
  t         顯示文件內容   - display contents of archive
  x[o]     釋放/提取文件   - extract file(s) from the archive
 command specific modifiers:
  [a]      追加到    - put file(s) after [member-name]
  [b]      放到某文件之前    - put file(s) before [member-name] (same as [i])
  [N]      距離    - use instance [count] of name
  [f]      刪除文件??截斷成員名!!!    - truncate inserted file names
  [P]      使用全路徑    - use full path names when matching
  [o]       保護原始時間   - preserve original dates
  [u]       更新   - only replace files that are newer than current archive contents
 generic modifiers:
  [c]       不警告   - do not warn if the library had to be created
  [s]        產生索引  - create an archive index (cf. ranlib)
  [S]        不產生符號表  - do not build a symbol table
  [v]        詳細  - be verbose
  [V]          - display the version number
 emulation options: 
  No emulation specific options
Report bugs to bug-binutils@gnu.org

應用:ar rv libtest.a add.o minus.o 將add.o,minus.o合成一個庫文件test
連接時的選項:gcc -o test.exe test.c -ltest


生成靜態庫的方法

$ gcc -c gdfontwu.c
$ gcc -c gdfontliu.c
$ gcc -c gdfontbin.c
$ ar rc libgdfont.a gdfontwu.o gdfontliu.o gdfontbin.o
(ranlib libgdfont.a 可生成索引)

用 nm libgdfont.a 來看里面的目標文件和導出函數(帶 T 標記)。


o 生成動態庫的方法

$ gcc -c gdfontwu.c
$ gcc -c gdfontliu.c
$ gcc -c gdfontbin.c
$ gcc -o libgdfont.so -shared -fPIC gdfontwu.o gdfontliu.o gdfontbin.o

-fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯后的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程需要,而不能達到真正代碼段共享的目的。可用 nm libgdfont.so 來看
里面導出的函數(帶 T 標記)。

用動態庫的好處是:更新了動態庫之后鏈結它的程序不用重新編譯。


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆视频网站| 久久久午夜电影| 亚洲一二三四区| 成人国产在线观看| 国产日韩av一区二区| 精品一区二区三区日韩| 欧美不卡视频一区| 狠狠色狠狠色综合| www激情久久| 蜜臀va亚洲va欧美va天堂| 91精品欧美一区二区三区综合在 | 一区二区三区在线视频免费| 91色|porny| 日日夜夜精品视频免费| 日韩色在线观看| 国产精品影视在线观看| 欧美国产激情一区二区三区蜜月| 99久久免费视频.com| 一区二区高清免费观看影视大全| 91美女福利视频| 蜜桃av一区二区三区电影| 欧美精品一区二区三区四区| 国产精品亚洲а∨天堂免在线| 国产精品的网站| 日韩一区二区影院| 99国产一区二区三精品乱码| 亚洲嫩草精品久久| 久久精品在线观看| 九一久久久久久| 欧美一级在线观看| 色八戒一区二区三区| 国产美女主播视频一区| 亚洲宅男天堂在线观看无病毒| 欧美zozozo| 欧美男生操女生| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲曰韩产成在线| 精品国产乱码91久久久久久网站| 色老综合老女人久久久| 国产精品一二一区| 久久福利资源站| 午夜欧美2019年伦理| 亚洲欧美日韩成人高清在线一区| 久久免费看少妇高潮| 欧美一区中文字幕| 欧美日韩综合一区| 欧美日韩另类一区| 欧美在线不卡视频| 欧美影院一区二区| 欧美亚洲另类激情小说| 色婷婷综合久久久久中文| 99精品久久免费看蜜臀剧情介绍| 国产成人亚洲综合a∨婷婷图片| 韩国av一区二区| 高清视频一区二区| 99在线精品视频| 欧美性三三影院| 欧美一卡二卡在线| 国产亚洲美州欧州综合国| 亚洲国产精品精华液ab| 亚洲黄色性网站| 日本色综合中文字幕| 国产成人免费视频一区| 91网站最新网址| 91精品久久久久久久91蜜桃| 26uuu成人网一区二区三区| 日本一区二区免费在线观看视频| 国产精品每日更新在线播放网址| 欧美日韩大陆在线| 欧美一区永久视频免费观看| 欧美精品一区二区在线播放| 国产精品色在线观看| 亚洲www啪成人一区二区麻豆| 奇米影视7777精品一区二区| proumb性欧美在线观看| 91精品国模一区二区三区| 国产精品久久久久久一区二区三区 | 高清不卡在线观看av| 欧美性一区二区| 中文字幕欧美日韩一区| 视频一区二区不卡| 99精品桃花视频在线观看| 91精品国产高清一区二区三区 | 亚洲精品视频自拍| 激情成人综合网| 欧美日韩成人一区二区| 国产精品久久久一本精品| 久久99精品久久久久婷婷| 在线观看成人免费视频| 国产精品欧美一区二区三区| 久久99蜜桃精品| 51久久夜色精品国产麻豆| 亚洲成av人**亚洲成av**| 成人黄色片在线观看| 国产亚洲欧美日韩日本| 国产一区二区三区在线观看免费视频| 欧美日韩国产高清一区二区| 国产精品理论片| 99久久伊人精品| 亚洲欧美激情在线| 欧洲av在线精品| 亚洲欧美一区二区久久| 91网址在线看| 久久夜色精品国产欧美乱极品| 亚洲自拍都市欧美小说| 欧美日韩精品系列| 天天爽夜夜爽夜夜爽精品视频| 欧美精品1区2区| 精品一二三四区| 日本一区二区三区视频视频| 成人黄色av网站在线| 又紧又大又爽精品一区二区| 91国内精品野花午夜精品| 午夜免费欧美电影| 精品精品欲导航| 成人99免费视频| 亚洲国产中文字幕在线视频综合| 欧美精品在线视频| 国内精品久久久久影院色| 国产精品乱码人人做人人爱| 精品视频一区三区九区| 国内精品国产三级国产a久久| 久久综合中文字幕| 色呦呦一区二区三区| 久久99国产精品久久99| 中文字幕亚洲不卡| 精品国产免费一区二区三区香蕉| 不卡的av中国片| 免费成人在线播放| 亚洲免费av高清| 国产日韩欧美精品电影三级在线| 欧美色图天堂网| 成人黄色在线网站| 久久电影网电视剧免费观看| ...xxx性欧美| 国产亚洲精品免费| 日韩欧美国产精品| 欧美日韩高清一区二区| 色偷偷久久人人79超碰人人澡| 久久99精品久久久| 老鸭窝一区二区久久精品| 亚洲自拍与偷拍| 亚洲在线中文字幕| 亚洲国产精品久久久久婷婷884| 国产女同互慰高潮91漫画| 日韩三级在线观看| 欧美一级片免费看| 制服丝袜在线91| 日韩视频永久免费| 欧美电影免费观看完整版| 欧美精品v日韩精品v韩国精品v| 在线观看日韩国产| 色欧美乱欧美15图片| 五月婷婷色综合| 视频在线观看一区二区三区| 亚洲精品视频在线看| 亚洲电影一级片| 免费观看30秒视频久久| 国内精品写真在线观看| 国产高清精品网站| 91久久精品一区二区三| 欧美日韩1234| 日韩欧美aaaaaa| 国产日产亚洲精品系列| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 中文字幕高清不卡| 玉足女爽爽91| 精品亚洲porn| 色婷婷综合久久久中文字幕| 在线观看91av| 久久精品水蜜桃av综合天堂| 亚洲精品国产视频| 精品无人码麻豆乱码1区2区| 99精品国产99久久久久久白柏 | 一本一道综合狠狠老| 欧美区一区二区三区| 中文字幕精品一区| 久久精品国产色蜜蜜麻豆| 91亚洲午夜精品久久久久久| 欧美一级久久久久久久大片| 欧美日韩国产乱码电影| 国产精品久久久久久一区二区三区| 亚洲线精品一区二区三区| 福利一区福利二区| 日韩精品一区二区三区四区视频| 亚洲精品视频在线观看免费 | 日本午夜精品一区二区三区电影| 99精品国产一区二区三区不卡| 久久久电影一区二区三区| 奇米影视一区二区三区| 欧美久久久影院| 亚洲已满18点击进入久久| av成人动漫在线观看| 欧美激情一区二区三区| 国产一区二区91| 久久夜色精品国产欧美乱极品| 精品一区二区三区欧美| 亚洲精品在线免费播放| 狂野欧美性猛交blacked| 欧美大片拔萝卜|