2012-12-06 61 views
2

在linux上,在許多文件夾下都有socket.h,如下所示。如何在Linux中組織頭文件

  1. 它是如何決定什麼存儲在asm文件夾vs linux比特。我假設sys下的所有東西都是簡單的libc

  2. 頭文件按gcc解決問題的順序。例如,它是從sys中選擇socket.h,然後是linux,然後是sys,然後是位等等。

/usr/include/sys/socket.h,(由libc的使用)

/usr/include/linux/socket.h

的/ usr /包括/ ASM /插座。 ħ

/usr/include/asm-generic/socket.h

/usr/include/bits/socket.h(由libc的包括)

+1

你是在談論應用程序級編程(顯然是),還是關於內核編程?你爲什麼問?重要的是你應該包含的「頂層」頭文件,並且這些頭文件都有記錄。 –

回答

1

對於根兒人檔案

這是很容易,如果你使用的是gcc編譯器

gcc -M filename.c 

這將顯示依賴關係編譯的文件的完整列表做。它將包含編譯中包含的所有頭文件的完整路徑。

的系統文件

在不同的音符,如果你正在尋找系統頭文件,如socket.h例如,你應該看一下插座的手冊頁

man socket 

這應該告訴你一些像this,這使得它很清楚,你正在尋找的文件是/usr/include/sys/socket.h

4

1)裸露的#include <socket.h>將無法​​在默認的Linux配置中工作:

fatal error: socket.h: No such file or directory 

這意味着,你必須指定一個目錄的子目錄在GCC的搜索路徑也:#include <sys/socket.h>(相對於/usr/include,所以絕對路徑是/usr/include/sys/socket.h)。要確定要使用哪個頭文件,請查看man socket

一般而言,/usr/include/sys包含最終用戶標題,而bits/asm包含中間標題,由gcc和其他標題使用。 /usr/include/linux包含特定於Linux的頭文件(通常與內核共享,所以它描述了可能對用戶空間編程有用的內核結構)。

Libc頭文件通常分散在整個/ usr/include中。 Gcc特定的頭文件經常在像/usr/include/x86_64-linux-gnu等這樣的地方。

2) 這裏:http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html你可以找到更多關於GCC搜索路徑的信息。沒有任何猜測的目錄被搜索,只有/usr/include和其他鏈接列表中的其他人。