導航:首頁 > 源碼編譯 > gcc如何指定頭文件編譯

gcc如何指定頭文件編譯

發布時間:2023-08-17 13:46:39

① 關於在linux下用gcc編譯頭文件

首先,確定你的頭文件都用宏隔開了,防止了重復定義。例如,在file.h 中的開頭就是
#ifndef __FILE__HEAD___
#define __FILE__HEAD___
//頭文件中的內容
#endif //__FILE__HEAD___
之後,
file.h中用到了list.h ,所以file.h中#include "list.h"//假設頭文件都在同一目錄下
list.h中用到了preapre.h 所以list.h中#include "prepare.h"
prepare.h中用到了node.h 所以prepare.h中#include "node.h"

在某些情況下,由於代碼組織等的問題,還是會出現編譯問題,這個就是代碼組織技巧的問題了,要根據具體代碼具體判斷了。
另外,准確的說頭文件只是在編譯的第一步,預處理的時候使用了,真正被「編」的應該是源文件,這個是編譯原理方面的問題了。

② 請問GCC編譯器是如何實現對程序引入的頭文件的處理的

預處理過程階段。

將頭文件插入到.c文件中。

比如#include <stdio.h> ,就會把stdio.h頭文件中的內容插入到對應的.c #include的那行。如果頭文件中還有include, 遞歸插入。直到沒有為止。

詳細參見gnu gcc 說明文檔。

http://gcc.gnu.org/onlinedocs/cpp/

③ linux 怎麼編譯c的源程序的gcc,編譯命令是什麼

在Linux下面,如果要編譯一個C語言源程序,我們要使用gcc編譯器。

先將源文件編譯成目標文件:gcc - c hello.c

生成hello.o文件,再將目標文件編譯成可執行文件:gcc -o hello hello.o

如:

int main(int argc,char **argv)

{

printf("Hello Linux ");

}

(3)gcc如何指定頭文件編譯擴展閱讀:

在使用GCC編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,這里只介紹其中最基本、最常用的參數。具體可參考GCC Manual。

GCC最基本的用法是∶gcc [options] [filenames]

其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。

網路_gcc

④ 如何指定GCC的默認頭文件路徑

看下文的紅色部分。 有大量的環境變數可供設置以影響 GCC 編譯程序的方式。利用這些變數的控制也可使用合適的命令行選項。一些環境變數設置在目錄名列表中。這些名字和 PATH 環境變數使用的格式相同。特殊字元 PATH_SEPARATOR (安裝編譯程序的時候定義)用在目錄名之間。在 UNIX 系統中,分隔符是冒號,而 Windows 系統中為分號。 C_INCLUDE_PATH 編譯C 程序時使用該環境變數。該環境變數指定一個或多個目錄名列表,查找頭文件,就好像在命令行中指定 -isystem 選項一樣。會首先查找 -isystem 指定的所有目錄。 ==> 也見 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 COMPILER_PATH 該環境變數指定一個或多個目錄名列表,如果沒有指定 GCC_EXEC_PREFIX 定位子程序,編譯程序會在此查找它的子程序。 ==> 也見 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行選項。 CPATH 編譯C 、 C++ 和 Objective-C 程序時使用該環境變數。該環境變數指定一個或多個目錄名列表,查找頭文件,就好像在命令行中指定 -l 選項一樣。會首先查找 -l 指定的所有目錄。 ==> 也見 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 CPLUS_INCLUDE_PATH 編譯C++ 程序時使用該環境變數。該環境變數指定一個或多個目錄名列表,查找頭文件,就好像在命令行中指定 -isystem 選項一樣。會首先查找 -isystem 指定的所有目錄。 ==> 也見 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 DEPENDENCIES_OUTPUT 為文件名設置該環境變數會讓預處理程序將基於依賴關系的 makefile 規則寫入文件。不會包括系統頭文件名字。 如果環境變數設置為單名,被看作是文件名字,而依賴關系規則的名字來自源文件名字。如果定義中有兩個名字,則第二個名字是用作依賴關系規則的目標名。 設置該環境變數的結果和使用命令行選項 -MM 、 -MF 和 -MT 的組合是一樣的。 ==> 也見 SUNPRO_DEPENDENCIES 。 GCC_EXEC_PREFIX 如果定義了該環境變數,它會作為編譯程序執行的所有子程序名字的前綴。例如,如果將變數設置為 testver 而不是查找 as ,匯編器首先會在名字 testveras 下查找。如果在此沒有找到,編譯程序會繼續根據它的普通名進行查找。可在前綴名中使用斜線指出路徑名。 GCC_EXEC_PREFIX 的默認設置為 prefix /lib/gcc-lib/ ,這里的 prefix 是安裝編譯程序時 configure 腳本指定的名字。該前綴也用於定位標准連接程序文件,包含進來作為可執行程序的一部分。 如果使用 -B 命令行選項,會重寫該設置。 ==> 也見 COMPILER_PATH 。 LANG 該環境變數用於指出編譯程序使用的字元集,可創建寬字元文字、串文字和注釋。 定義LANG 為 C-JIS ,指出預處理程序將多位元組字元按照 JIS (日語工業標准)字元進行解釋。 C-SJIS 可用來指出 Shift -JIS 字元而 C-EUCJP 指出日文 EUC 。 如果沒有定義 LANG ,或定義為不可識別,函數 mblen() 被用來確定字元寬度,而 mbtowc() 用來將多位元組序列轉換為寬字元。 LC_ALL 如果設置,該環境變數的值重寫 LC_MESSAGES 和 LC_CTYPE 的所有設置。 LC_CTYPE 該環境變數指出引用串中定義的多位元組字元的字元分類。主要用於確定字元串的字元邊界,字元編碼需要用引號或轉義符,可被錯誤地解釋為字元串的結尾或特殊字 符串。對 Australian English ,可將它設置為 en_AU ;對 Mexican Spanish ,可將它設置為 es_MX 。如果沒有設置該變數,默認為 LANG 變數的值,或如果沒有設置 LANG ,那就使用 C 英語行為。也見 LC_ALL 。 LC_MESSAGES 該環境變數指出編譯程序使用何種語言發出診斷消息。對 Australian English ,可設置為 en_AU ;對 MexicanSpanish ,可設置為 es_MX 。如果變數沒有設置,使用 LANG 變數的默認值,或如果沒有設置 LANG ,那就使用 C 英語行為。也見 LC_ALL 。 LD_LIBRARY_PATH 該環境變數不會影響編譯程序,但程序運行的時候會有影響。變數指定一個目錄列表,程序會查找該列表定位共享庫。只有當未在編譯程序的目錄中找到共享庫的時候,執行程序必須設置該變數。 LD_RUN_PATH 該環境變數不會影響編譯程序,但程序運行的時候會有影響。該變數在運行時指出文件的名字,運行的程序可由此得到它的符號名字和地址。地址不會重新載入,因而可能符號引用其他文件中的絕對地址。這和 ld 工具使用 -R 選項完全一樣。 LIBRARY_PATH 該環境變數可設置為一個或多個目錄名字列表,連接程序會搜尋該目錄,以查找特殊連接程序文件,和由 -l (字母 l )命令行選項指定名字的庫。 由 -L 命令行選項指定的目錄在環境變數的前面,首先被查找。 ==> 也見 COMPILER_PATH 。 OBJC_INCLUDE_PATH 在編譯 Objective-C 程序的時候使用該環境變數。一個或多個目錄名的列表由環境變數指定,用來查找頭文件,就好像在命令行中指定 -isystem 選項一樣。所有由 -isystem 選項指定的目錄會首先被查找。 S

⑤ 如何指定gcc的默認頭文件路徑

gcc指定頭文件路徑及動態鏈接庫路徑

本文詳細介紹了Linux 下gcc頭文件指定方法,以及搜索路徑順序的問題。另外,還總結了,gcc動態鏈接的方法以及路徑指定,同樣也討論了搜索路徑的順序問題。本文包含了很多的例子,具有很強的操作性,希望讀者自己去走一遍。
一.#include <>與#include 「」
#include <>直接到系統指定的某些目錄中去找某些頭文件。
#include 「」先到源文件所在文件夾去找,然後再到系統指定的某些目錄中去找某些頭文件。
二.gcc指定頭文件的三種情況:
1.會在默認情況下指定到/usr/include文件夾(更深層次的是一個相對路徑,gcc可執行程序的路徑是/usr/bin/gcc,那麼它在實際工作時指定頭文件頭徑是一種相對路徑方法,換算成絕對路徑就是加上/usr/include,如#include 就是包含/usr/include/stdio.h)
2.GCC還使用了-I指定路徑的方式,即
gcc -I 頭文件所在文件夾(絕對路徑或相對路徑均可) 源文件
舉一個例子:
設當前路徑為/root/test,其結構如下:
include_test.c
include/include_test.h
有兩種方法訪問到include_test.h。
1. include_test.c中#include 「include/include_test.h」然後gcc include_test.c即可
2. include_test.c中#include 或者#include 然後gcc –I include include_test.c也可
3. 參數:-nostdinc使編譯器不再系統預設的頭文件目錄裡面找頭文件,一般和-I聯合使用,明確限定頭文件的位置。
在編譯驅動模塊時,由於非凡的需求必須強制GCC不搜索系統默認路徑,也就是不搜索/usr/include要用參數-nostdinc,還要自己用-I參數來指定內核頭文件路徑,這個時候必須在Makefile中指定。
頭文件搜索順序:
1.由參數-I指定的路徑(指定路徑有多個路徑時,按指定路徑的順序搜索)
2.然後找gcc的環境變數 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH
3.再找內定目錄
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
庫文件,但是如果裝gcc的時候,是有給定的prefix的話,那麼就是
/usr/include
prefix/include
prefix/xxx-xxx-xxx-gnulibc/include
prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
三.Linux指定動態庫路徑
眾所周知,Linux動態庫的默認搜索路徑是/lib和/usr/lib。動態庫被創建後,一般都復制到這兩個目錄中。當程序執行時需要某動態庫, 並且該動態庫還未載入到內存中,則系統會自動到這兩個默認搜索路徑中去查找相應的動態庫文件,然後載入該文件到內存中,這樣程序就可以使用該動態庫中的函 數,以及該動態庫的其它資源了。在Linux 中,動態庫的搜索路徑除了默認的搜索路徑外,還可以通過以下三種方法來指定。
1.在配置文件/etc/ld.so.conf中指定動態庫搜索路徑。
可以通過編輯配置文件/etc/ld.so.conf來指定動態庫的搜索路徑,該文件中每行為一個動態庫搜索路徑。每次編輯完該文件後,都必須運行命令ldconfig使修改後的配置生效。
舉一個例子:
所有源文件:
源文件1: lib_test.c
#include
void prt()
{
printf(「You found me!!!/n」);
}
源文件2: main.c
void prt();
int main()
{
prt();
return 0;
}

閱讀全文

與gcc如何指定頭文件編譯相關的資料

熱點內容
at89c51編程器 瀏覽:339
項目經理叫醒程序員 瀏覽:342
autocad旋轉命令 瀏覽:660
手機版wpsoffice怎麼打包文件夾 瀏覽:579
在成都學車用什麼app 瀏覽:818
grep命令管道 瀏覽:426
java修改重啟 瀏覽:567
單片機供電方案 瀏覽:770
airpodspro一代怎麼連接安卓 瀏覽:218
豌豆莢app上有什麼游戲 瀏覽:283
公路商店app標簽選什麼 瀏覽:338
linuxoracle命令行登錄 瀏覽:227
android深度休眠 瀏覽:172
php微信開發例子 瀏覽:845
醫得app登錄密碼是什麼 瀏覽:142
spring開發伺服器地址 瀏覽:411
伺服器上如何查看伺服器的埠 瀏覽:678
單片機伺服器編譯 瀏覽:770
單口usb列印機伺服器是什麼 瀏覽:859
戰地五開伺服器要什麼條件 瀏覽:956