今天試試mysql connector c++. 下載了已經(jīng)編譯好的文件,里面有兩個(gè)非常重要的文件夾分別是:
include 和 lib
include
如果不深究,你很快就知道頭文件的作用,在你使用這個(gè)這個(gè)庫里面的類(lèi)、方法的時(shí)候,需要使用include的方法引入,這個(gè)我們前面都說(shuō)過(guò),也很容易理解。include文件中包含了所有你要使用的東西的聲明,編寫(xiě)程序的時(shí)候你通過(guò)include語(yǔ)句將所要使用的東西的聲明copy過(guò)去。這樣編譯就可以成功了。
關(guān)鍵是,這個(gè)include文件夾我們放在那里去?
這個(gè)時(shí)候就涉及到了,編譯的時(shí)候,include默認搜索路徑的問(wèn)題。網(wǎng)上有很多這方面的介紹,有幾個(gè)原則這里說(shuō)明一下:
(1)著(zhù)名的使用<>和“”的區別。這么說(shuō)吧,<>有一系列的待選訪(fǎng)問(wèn)文件夾(路徑),編譯器依次訪(fǎng)問(wèn),先找到先用。那么“”就是在<>那一系列的訪(fǎng)問(wèn)路徑前面,加上一個(gè)“當前目錄”
(2)這是我一直的誤解,我不知道大家有沒(méi)有誤解。我之前認為會(huì )在哪些路徑(目錄),下面深入搜索下去。當初也不知道為什么就有這個(gè)想法。不過(guò)今天折騰了好長(cháng)時(shí)間,得出的結論是,編譯器只會(huì )搜索哪些指定路徑(目錄)下面的那些文件,不會(huì )繼續打開(kāi)下層文件夾繼續搜索。
(3)記住,頭文件引入預編譯語(yǔ)句include只是引入頭文件,它可以使用絕對地址,也可以使用相對地址,這里的相對地址,指的是以那些設置好的一些列路徑(文件夾、目錄)為起始的相對地址,所以,如果你要使用頭文件是在那些路徑的下面的某個(gè)沒(méi)有進(jìn)入待選路徑的文件夾,你可以使用/加入文件夾前綴。include <cppconn/driver.h>
lib
我們編譯好的那些目標文件,有些在程序中所處的角色和庫文件是一樣的——都是那些頭文件的實(shí)現文件。鏈接的動(dòng)作,就是“兌現頭文件(聲明)所做的承諾(有這個(gè)東西)”
怎么兌現呢?有兩種方法:
1,直接將那些實(shí)現合并進(jìn)來(lái)。這就是著(zhù)名的靜態(tài)鏈接。
2,告訴你一個(gè)地址以及相關(guān)信息,你可以去看看,并且保存相關(guān)的引用信息。但是并不合并進(jìn)你的程序。待你的程序執行的時(shí)候,使用當初你保留的引用信息,就可以使用這個(gè)公用的“實(shí)現代碼”。這就是著(zhù)名的動(dòng)態(tài)鏈接。
bin include lib 梳理
我們在從linux文件目錄上看看這些東西的分布。
linux文件系統中,有些目錄需要我們注意,注意,linux目錄的安排是一種管理方式上的決定,也就是說(shuō),GNU希望大家都遵守這種文件安排模式,利于交流和可閱讀。
我們會(huì )經(jīng)??吹絙in/sbin include lib三種文件夾。
bin/sbin:
bin來(lái)源于binary,也就是二進(jìn)制文件,在linux中,文件盡量是明文的(也就是字符串格式的),這是linux尊從的一種守則,與windows有明顯的區別。在這種基調下,很少出現二進(jìn)制文件,出現的大部分就是機器語(yǔ)言的可執行文件,或者那種庫文件。在linnux中規定,bin/sbin夾下方的都是那種可執行的文件。這與lib中的文件不同,lib是庫,雖然也是二進(jìn)制機器代碼,但是它是不能自主執行的,是需要通過(guò)其他代碼的應用執行的。
系統程序通常放在 /bin /sbin下面, s的區別就是超級管理員才能使用的程序。
應用程序則放在/usr下面。
程序所要關(guān)聯(lián)的文件,包括include(開(kāi)發(fā)的時(shí)候需要引入的),lib編譯連接的時(shí)候需要應用,bin是編譯結束后的可執行程序的載體。
如果,不使用動(dòng)態(tài)鏈接,那么只需要bin,加上了動(dòng)態(tài)鏈接則需要lib。include文件在開(kāi)發(fā)編譯之后不必存在,所以你會(huì )發(fā)現在更目錄下,通常只有bin/sbin,lib而沒(méi)有include。因為,設計到系統支持的東西,也不會(huì )有太多編程的情景。
那么在/usr文件夾下,程序所需要的東西就分布的比較完整。
/usr 全稱(chēng)unix software room(可能準確)。也就是說(shuō)usr這個(gè)文件夾下面放的是在linux之上的一些軟件,我們統稱(chēng)為應用軟件(有時(shí)候也不是,其實(shí)系統軟件和應用軟件的界限本來(lái)就不明確,我們可以理解為,usr下裝的是那些在一個(gè)基本的操作系統之上的一些軟件)。這樣,你就可以明白linux文件目錄中,為什么有好多地方有bin,include,lib等等。
linux是在開(kāi)源思想下形成的,所以,對于一個(gè)軟件,linux的哲學(xué)是,它應該有源碼的(src)、應該附有編程接口的(include,lib),當然也不能缺一個(gè)可執行程序的基本的東西(bin,lib),而實(shí)際上,window所秉承的商業(yè)軟件結構,就基本上只會(huì )有bin和lib兩個(gè)東西。這就是區別:
所有在/usr 這個(gè)linux系統專(zhuān)門(mén)用來(lái)放應用軟件的文件夾下面就有:
/usr/bin /usr/sbin /usr/include /usr/lib/usr/scr這些文件夾(當然還有其他的一些東西)。
我們還有一個(gè)特殊的文件夾/usr/local
local里面的結構基本和/usr里面的差不多,這是怎么回事,雖然我不能確切的知道local的作用但是,許多有經(jīng)驗的人都告訴你,如果你自己進(jìn)行源碼編譯安裝軟件的話(huà),就盡量放在local下面的體系中。
那么原因是什么?很簡(jiǎn)單,/usr這個(gè)文件夾就是用來(lái)轉載一起linux上跑的應用程序,在它的下層目錄中,規整的放置著(zhù)程序的各個(gè)部分。也就是說(shuō)程序與程序之間并不是分開(kāi)放的,而是拆開(kāi)放在各個(gè)容器中。但是,這并不是硬性的技術(shù)要求,只是這樣的
聯(lián)系客服