2

Linux では、以下に示すように、多くのフォルダーの下に socket.h があります。

  1. asm フォルダーと Linux とビットの下に格納されるものはどのように決定されますか。私はsysの下のすべてが単にlibcであると仮定しています

  2. ヘッダー ファイルが gcc によって解決される順序を教えてください。たとえば、sys、次にlinux、sys、bitsなどからsocket.hを選択しますか?

/usr/include/sys/socket.h (libc で使用)

/usr/include/linux/socket.h

/usr/include/asm/socket.h

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

/usr/include/bits/socket.h (libc に含まれています)

4

2 に答える 2

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/linuxLinux固有のヘッダーが含まれています(多くの場合、カーネルと共有されるため、ユーザースペースプログラミングに役立つ可能性のあるカーネル構造の説明です)。

Libcヘッダーは通常、/ usr/include全体に散在しています。Gcc固有のヘッダーは、多くの場合、/usr/include/x86_64-linux-gnuなどの場所にあります。

2)ここ: http: //gcc.gnu.org/onlinedocs/cpp/Search-Path.html GCC検索パスの詳細については、こちらをご覧ください。/usr/includeリンク内のリストにある他のディレクトリだけで、推測されたディレクトリは検索されません。

于 2012-12-08T21:13:58.443 に答える
1

一般ファイルの場合

gccコンパイラを使用している場合、これは非常に簡単です。

gcc -M filename.c

これにより、コンパイルされたファイルの依存関係の完全なリストが表示されます。これには、コンパイルに含まれるすべてのヘッダーファイルのフルパスが含まれます。

システムファイルの場合

socket.h別の注意点として、たとえば、システムヘッダーファイルを探している場合は、ソケットのマニュアルページを参照する必要があります。

man socket

これにより、次のようなものが表示されるはずです。これにより、探しているファイルが次のようになっていることがはっきりとわかります。/usr/include/sys/socket.h

于 2012-12-08T20:32:50.683 に答える