(一)概念
什么是函數庫呢?一下子說概念大家可能不太熟悉,但是這實際上是大家在windows系統上經常見到的東西。沒錯,就是那些后綴為DLL的文件。
linux上實際也有自己的函數庫文件,文件類型為.a或是.so,前者是靜態函數庫,后者是動態函數庫。
靜態函數庫和動態函數庫有什么區別?靜態函數庫和動態函數庫在編譯的時候都需要用到,但是不同的是,靜態函數庫在和程序一起編譯的時候會把自己的函數程序加到程序當中,編譯完之后程序就不再需要這個函數庫了。也就是說,靜態函數庫只在編譯的時候使用。但是動態函數庫就不一樣了,它和我們在windows下使用的動態鏈接庫很像,編譯的時候它里面的程序不會被編譯到程序里,程序在運行的時候要帶着它一起運行,也就是說程序編譯和運行都需要它。
(二)Linux在編譯的時候使用函數庫
在linux之中使用函數庫,並不是我們在代碼中加上相關的頭文件編譯器就會自動找到函數庫,把函數庫中的程序編進去。我們還需要在編譯的時候加上相應的函數庫選項。
以rt(用於定時器)、pthread(用於多線程)、gumbo(之前的博文當中編譯過的第三方函數庫)為例:
gcc main.c -o main -lpthread
gcc main.c -o main -lrt
gcc main.c -o main -lgumbo
只要我們程序當中用到了某個函數庫,就是在編譯選項上加上“-l函數庫名”,l是小寫的L。
不過,如果函數庫並沒有被放在系統的默認搜索位置,像上面這樣子編譯是不行的。
你可以簡單地以以下方式處理:
比如說,我們要用到gumbo這個函數庫,但是它的函數庫文件並沒有放在默認搜索位置
(1)先找到libgumbo.a函數庫文件,將其放在和自己的代碼相同的目錄位置
(2)編譯的時候輸入gcc main.c -o main ./libgumbo.a
還有其他更靈活的方式,大家可以自己查資料。
(三)在codeblock中添加函數庫選項
(1)添加函數庫編譯選項的位置
點擊Settings->Compiler 切換到Linker setting標簽
(2)為了編譯時添加相應的函數庫,你可以在Link library下點擊add 然后將其添加進去
以gumbo庫為例
(3)如果函數庫位於系統的默認搜索路徑下面,也可以這樣子設置
在Other linker options下添加-lpthread -lrt -lgumbo這些選項
當然,你除了使用別人的函數庫之外,也可以自己代碼編譯成函數庫,像上文那樣使用。那么怎樣使用codeblock編譯自己的代碼成函數庫呢?我們下一篇再說。