<stdlib.h>
および<stdio.h>
ヘッダーがUbuntuサーバーの/usr/include
フォルダーにあることがわかりましたが、sys/types.h
が見つかりません。
そして、コンパイラが/usr/include
フォルダー内のヘッダーファイルを実際に使用しないと疑い始めます。
これは本当ですか、ファイルはどこにありますか?
私のDebianボックス(そして、できればUbuntuがそれを破壊していないことを願っていますtoo熱心にたくさん)それは/usr/include/sys/types.h
。
あなたの最善の策は、最初に実行することです:
find /usr/include -name types.h
その後:
find / -name types.h
最初のもので見つからない場合。
しかし、開発用のものはinstalled。でさえないかもしれないことを覚えておいてください他のものはデフォルトのインストールの一部ではありませんでした(ただし、ftpd
やApache
などのサーバーのものがたくさんあります)。
コンパイラがどこかでそれを見つけていて、どこかわからない場合は、次のようなものを使用できます。
echo "#include <sys/types.h>" | gcc -E -x c - | grep /types.h
それがどこから来たのかを知るために。
または:
echo "#include <stdio.h>" | gcc -E -x c - | grep /stdio.h
あなたが心配している他のヘッダーについて。
余談:
gcc
コマンドラインは、前処理段階(-E
)、ファイルを強制的にCソースコード(-x c
)標準入力からプログラムを取得します(-
)、この場合はecho
ステートメントから。
最後のgrep
は、重要でない行を取り除きます。
ファイル sys/types.h
は/usr/include/sys/types.h
この種の致命的なエラーを取得した場合:
.../linux/linux_types.h:146:38: fatal error: /usr/include/sys/types.h: No
such file or directory
修正次のコードを使用して:
Sudo apt-get install build-essential flex libelf-dev libc6-dev-AMD64 binutils-dev libdwarf-dev
ロケートコマンドを使用できる場合は、単にlocate
を使用できます。
-bash-3.2$ locate sys/types.h
/usr/include/sys/types.h
/usr/lib/syslinux/com32/include/sys/types.h
-bash-3.2$
それはそれをする最も速くて最も簡単な方法です。
将来の参考のために、debianマシンでこの問題に遭遇しましたが、私の場合は
$ apt-file find /usr/include/sys/types.h
libc6-dev-i386: /usr/include/sys/types.h
libc6-dev-i386は、インストールする必要があると思われるパッケージです
Linuxでは、types.h
は/usr/include/sys/types.h
。
Slackwareでは、この問題を解決するためにglibcをインストールする必要がありました。