今天試試mysql connector c++. 下載了已經編譯好的文件,里面有兩個非常重要的文件夾分別是: include 和 lib include 如果不深究,你很快就知道頭文件的作用,在你使用這個這個庫里面的類、方法的時候,需要使用include的方法引入,這個我們前面都說過,也很容易理解。include文件中包含了所有你要使用的東西的聲明,編寫程序的時候你通過include語句將所要使用的東西的聲明copy過去。這樣編譯就可以成功了。 關鍵是,這個include文件夾我們放在那里去? 這個時候就涉及到了,編譯的時候,include默認搜索路徑的問題。網上有很多這方面的介紹,有幾個原則這里說明一下: (1)著名的使用<> 和“”的區別。這么說吧,<>有一系列的待選訪問文件夾(路徑),編譯器依次訪問,先找到先用。那么“”就是在<>那一系列的訪問路徑前面,加上一個“當前目錄” (2)這是我一直的誤解,我不知道大家有沒有誤解。我之前認為會在哪些路徑(目錄),下面深入搜索下去。當初也不知道為什么就有這個想法。不過今天折騰了好長時間,得出的結論是,編譯器只會搜索哪些指定路徑(目錄)下面的那些文件,不會繼續打開下層文件夾繼續搜索。
(3)記住,頭文件引入預編譯語句include只是引入頭文件,它可以使用絕對地址,也可以使用相對地址,這里的相對地址,指的是以那些設置好的一些列路徑(文件夾、目錄)為起始的相對地址,所以,如果你要使用頭文件是在那些路徑的下面的某個沒有進入待選路徑的文件夾,你可以使用/加入文件夾前綴。 include <cppconn/driver.h> 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上跑的應用程序,在它的下層目錄中,規整的放置著程序的各個部分。也就是說程序與程序之間并不是分開放的,而是拆開放在各個容器中。但是,這并不是硬性的技術要求,只是這樣的 |
|