久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    C++?編譯搜索路徑(包括include搜索路徑和連接搜索路徑)

     勤奮不止 2013-05-24

    今天試試mysql connector c++. 下載了已經編譯好的文件,里面有兩個非常重要的文件夾分別是:

    include 和 lib

     

    include

    如果不深究,你很快就知道頭文件的作用,在你使用這個這個庫里面的類、方法的時候,需要使用include的方法引入,這個我們前面都說過,也很容易理解。include文件中包含了所有你要使用的東西的聲明,編寫程序的時候你通過include語句將所要使用的東西的聲明copy過去。這樣編譯就可以成功了。

    關鍵是,這個include文件夾我們放在那里去?

    這個時候就涉及到了,編譯的時候,include默認搜索路徑的問題。網上有很多這方面的介紹,有幾個原則這里說明一下:

    (1)著名的使用<> 和“”的區別。這么說吧,<>有一系列的待選訪問文件夾(路徑),編譯器依次訪問,先找到先用。那么“”就是在<>那一系列的訪問路徑前面,加上一個“當前目錄”

    (2)這是我一直的誤解,我不知道大家有沒有誤解。我之前認為會在哪些路徑(目錄),下面深入搜索下去。當初也不知道為什么就有這個想法。不過今天折騰了好長時間,得出的結論是,編譯器只會搜索哪些指定路徑(目錄)下面的那些文件,不會繼續打開下層文件夾繼續搜索。

         這個可以從好幾個方面看出:

        1)如果是嵌套搜索,將會導致搜索時間加長。

        2)觀察/include/里面的那些頭文件的組織方式,你會發現他們呈現出較為平行的分布模式,也就是說,在一個大的功能模塊(一個文件夾)下面很少還會有更深的文件夾。

    (3)記住,頭文件引入預編譯語句include只是引入頭文件,它可以使用絕對地址,也可以使用相對地址,這里的相對地址,指的是以那些設置好的一些列路徑(文件夾、目錄)為起始的相對地址,所以,如果你要使用頭文件是在那些路徑的下面的某個沒有進入待選路徑的文件夾,你可以使用/加入文件夾前綴。 include <cppconn/driver.h>

    lib

     其實,如果你繼續不深究,你也可以很簡單的知道,lib是庫文件,而庫文件分成兩種,靜態和動態。庫文件的作用是在鏈接的時候出現的。事實上,我們通常接觸不到它。更為準確的將,我們進行鏈接的時候,是將各個目標文件(編譯而來),以及庫文件,合成在一起形成一個可執行程序。

    我們編譯好的那些目標文件,有些在程序中所處的角色和庫文件是一樣的——都是那些頭文件的實現文件。鏈接的動作,就是“兌現頭文件(聲明)所做的承諾(有這個東西)”

    怎么兌現呢?有兩種方法:

    1,直接將那些實現合并進來。這就是著名的靜態鏈接。

    2,告訴你一個地址以及相關信息,你可以去看看,并且保存相關的引用信息。但是并不合并進你的程序。待你的程序執行的時候,使用當初你保留的引用信息,就可以使用這個公用的“實現代碼”。這就是著名的動態鏈接。

     

     

     

    bin include lib 梳理

     

    我們在從linux文件目錄上看看這些東西的分布。

    linux文件系統中,有些目錄需要我們注意,注意,linux目錄的安排是一種管理方式上的決定,也就是說,GNU希望大家都遵守這種文件安排模式,利于交流和可閱讀。

    我們會經常看到bin/sbin include lib三種文件夾。

     

    bin/sbin:

    bin來源于binary,也就是二進制文件,在linux中,文件盡量是明文的(也就是字符串格式的),這是linux尊從的一種守則,與windows有明顯的區別。在這種基調下,很少出現二進制文件,出現的大部分就是機器語言的可執行文件,或者那種庫文件。在linnux中規定,bin/sbin夾下方的都是那種可執行的文件。這與lib中的文件不同,lib是庫,雖然也是二進制機器代碼,但是它是不能自主執行的,是需要通過其他代碼的應用執行的。

    系統程序通常放在 /bin /sbin下面, s的區別就是超級管理員才能使用的程序。

    應用程序則放在/usr下面。

     

    程序所要關聯的文件,包括include(開發的時候需要引入的),lib編譯連接的時候需要應用,bin是編譯結束后的可執行程序的載體。

    如果,不使用動態鏈接,那么只需要bin,加上了動態鏈接則需要lib。include文件在開發編譯之后不必存在,所以你會發現在更目錄下,通常只有bin/sbin,lib而沒有include。因為,設計到系統支持的東西,也不會有太多編程的情景。

     

    那么在/usr文件夾下,程序所需要的東西就分布的比較完整。

    /usr 全稱unix software room (可能準確)。也就是說usr這個文件夾下面放的是在linux之上的一些軟件,我們統稱為應用軟件(有時候也不是,其實系統軟件和應用軟件的界限本來就不明確,我們可以理解為,usr下裝的是那些在一個基本的操作系統之上的一些軟件)。這樣,你就可以明白linux文件目錄中,為什么有好多地方有bin ,include,lib等等。

     

    linux是在開源思想下形成的,所以,對于一個軟件,linux的哲學是,它應該有源碼的(src)、應該附有編程接口的(include,lib),當然也不能缺一個可執行程序的基本的東西(bin,lib),而實際上,window所秉承的商業軟件結構,就基本上只會有bin和lib兩個東西。這就是區別:

    所有在/usr 這個linux系統專門用來放應用軟件的文件夾下面就有:

    /usr/bin /usr/sbin /usr/include /usr/lib /usr/scr這些文件夾(當然還有其他的一些東西)。

     

    我們還有一個特殊的文件夾/usr/local

    local里面的結構基本和/usr里面的差不多,這是怎么回事,雖然我不能確切的知道local的作用但是,許多有經驗的人都告訴你,如果你自己進行源碼編譯安裝軟件的話,就盡量放在local下面的體系中。

     

    那么原因是什么?很簡單,/usr這個文件夾就是用來轉載一起linux上跑的應用程序,在它的下層目錄中,規整的放置著程序的各個部分。也就是說程序與程序之間并不是分開放的,而是拆開放在各個容器中。但是,這并不是硬性的技術要求,只是這樣的

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 久久久这里只有精品10| 鲁鲁网亚洲站内射污| 亚洲色欲色欲WWW在线丝| 国产欧美日韩一区二区三区| 55大东北熟女啪啪嗷嗷叫| 国产线观看免费观看| 人人妻人人藻人人爽欧美一区| 亚洲人成小说网站色在线| 久久亚洲中文字幕伊人久久大| 国产一级av在线播放| 亚洲日本VA中文字幕在线| 亚洲欧洲日韩国内高清 | 国产最新进精品视频| 自拍偷自拍亚洲精品播放| 亚洲区色欧美另类图片| 亚洲爆乳精品无码AAA片| AV喷水高潮喷水在线观看COM| 国产农村妇女毛片精品久久 | 东京热人妻丝袜无码AV一二三区观| 一本一道色欲综合网中文字幕| 在线高清免费不卡全码| 久久97精品久久久久久久不卡| 久久天堂综合亚洲伊人HD妓女| 无码囯产精品一区二区免费| 手机看片AV永久免费| 久久综合久中文字幕青草| 中文字幕人妻系列人妻有码| 夜夜添狠狠添高潮出水| 中文字幕国产精品自拍| 天天做天天爱天天爽综合网| 国产成人A在线视频免费| 狠狠色噜噜狠狠狠狠777米奇| 精品无码久久久久国产| 亚洲熟妇自偷自拍另类| 国产中文字幕在线一区| 国产精品V欧美精品V日韩精品 | 上课忘穿内裤被老师摸到高潮 | 好吊视频一区二区三区| 啊轻点灬大JI巴太粗太长了欧美| 亚洲精品一区二区动漫| 亚洲高清无在码在线电影不卡|