1. 程式人生 > >linux編程頭文件所在路徑的問題

linux編程頭文件所在路徑的問題

我們 函數調用 linux內核 完整 開頭 開發板 個數 stdio.h 失望

一、問題引入

1、頭文件與庫

當我們在PC主機linux環境下(如ubuntu),編寫linux應用程序,然後利用gcc來編譯。在源代碼的開始位置會寫入頭文件,那是因為我們使用了系統提供的庫函數,例如printf、open、read、write等等。我們會寫入類似的內容:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
......

我們的應用程序代碼編譯過程大概是這樣的:編譯器根據頭文件提供的庫函數接口形式,來編譯我們的代碼(如果不知道調用庫函數的形式,eg:參數個數、形式、返回值類型等,將無法對庫函數調用的代碼進行編譯),然後生成目標文件;然後,再使用鏈接器將這個目標文件與系統庫鏈接;最終生成我們需要的應用程序。所以,其實我們的代碼包含了自己寫的內容,還有系統為我們提供好的現成的庫函數,整個結合起來才形成一個完整的程序。

庫函數的頭文件,在編譯的時候被使用,而庫函數的代碼段(庫文件),在鏈接的時候被使用。

example:

應用程序代碼在使用一個系統調用的時候,例如printf()函數,需要指定包含的頭文件stdio.h;另外,在鏈接的時候對應的鏈接libc.a(筆者電腦文件所在目錄:/usr/lib/i386-linux-gnu/libc.a)。

總結一下,我們編寫應用程序,需要使用linux系統提供的庫函數。具體實現起來,需要頭文件和庫文件。頭文件是需要我們編寫應用程序的時候,在源文件開頭添加的;而庫文件則需要配置編譯環境進行指定搜索目錄。

2、頭文件和庫文件在哪兒?

編寫linux本機的應用程序、目標開發板的應用程序以及目標開發板的驅動,都會使用庫函數,那麽這些情況的頭文件和庫文件在哪兒放著呢?

不知道這個問題,在編寫代碼時會有疑惑。比如說,編寫目標開發板的應用程序時,使用了open、read、write等函數。於是,想在linux內核開發的源碼包(驅動開發環境)裏邊找到這些函數的完整代碼,或者降低要求,查看頭文件裏的函數聲明。結果令人失望,找不到需要的頭文件能提供這樣的函數聲明。這樣造成我們不知道該如何使用這些庫函數。

事實情況是,上邊列出常見的3種編程情況,所使用的頭文件和庫文件位置都不一樣。也就是說,上述3種編程情況,所使用的庫函數調用有可能是相同的,但是庫函數所在的頭文件以及對應的庫,所在的位置卻不一樣。所以,編寫目標開發板的應用程序時,在內核開發的源碼包(驅動開發環境)中,找不到我們需要的頭文件。

下面,根據不同的編程情況,進行說明。

或者利用交叉編譯工具arm-linux-gcc

linux編程頭文件所在路徑的問題