/ usr / include / sysディレクトリはどこにありますか?


13

最近、Kubuntu 12.04から13.04に完全に再インストールしてアップグレードしました。

gcc 4.7.3を使用します。/usr/include/sysディレクトリがないことを発見するために、いくつかのプログラムをコンパイルしました。つまり、types.hstat.h、など、存在しません。それらはinclude/linuxディレクトリに存在しますが、ディレクトリには存在しませんinclude/sys

どうしたの?


GCCが出力するエラーメッセージとは何ですか?してください編集これとあなたの問題に関連する他の情報を提供するために、質問を。
エドウィン14

1
ビルドエッセンシャルはインストールされていますか?
セス14

私が試したいくつかのプログラムはうまくコンパイルできるので、gccからのエラーメッセージはありません。ヘッダーがどこから来ているのかわかりません。関数やsyscallなどへの参照を作成するエディターがありますが、ディレクトリが見つからないのは残念です。
アヒル14

1
はい、ビルドエッセンシャルは最新です。
アヒル14

回答:


13

64ビットでUbuntuを使用している場合(32ビットシステムでは正確にテキストを送信できません)、質問のディレクトリは次のとおりです。

/usr/include/x86_64-linux-gnu/sys

これで、この情報を入手/usr/include/sysして、ターミナルでこれを使用してその場所()で本当に必要な場合、それらのファイルへのシンボリックリンクを作成できます。

sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h

# ...etc

はい、64ビット。私は他の場所で似たようなものを読んで、すべてがそのディレクトリにあるように見えますが、「#include sys / stat.h」からx86_64 / sysディレクトリにヘッダーがどのように含まれるかはわかりません。これは、いくつかの新しいgccインジェクション機能ですか?オフハンドでは、(外部的に)この動作につながるシンボリックリンクなどは見当たりません。
アヒル14

私たちは風の中をすれ違うように見えます。要するに、コンパイラーは何らかの魔法をしているということですが、エディターを幸せにするためにいくつかのシンボリックリンクのハックを使用する必要があるかもしれません。
アヒル14

@Duck私はちょうどあなたのコメントの2分前に私の答えを編集した:)
ラドゥRădeanu

5

64ビットLinuxで作業している場合はlibc6-dev-amd64をインストールします。ubuntuターミナルで次のコマンドを入力します。

sudo apt-get install libc6-dev-amd64

1

sysディレクトリは、多くのシステムコマンドを含むunix / linuxシステムヘッダーディレクトリです。異なるブランド/バージョンlinuxは、異なる場所にそれを置くかもしれません。次のコマンドが役立ちます。

find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys

最初のものはBSD unixシステムヘッダーのホームです。
2つ目は、Linux 64ビットシステムヘッドを含むディレクトリです。

cmakeがsys / stat.hファイルを見つけられないという問題が発生しました。私の一時的な解決策は、シンボリックリンクを作成することです

/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h

/ usr / includeディレクトリを汚染したくありません。sysディレクトリ全体ではなく、特定のヘッダーファイルへのリンクのみを作成しています。これはcmakeの欠陥だと思うので、リンクを1つだけにすることで影響を最小限に抑えます。これが同じ問題に苦しんでいる人々を助けることを願っています。


1

gccのデフォルトのインクルード検索パスが何であるかを確認しましょう。この回答から、次のコマンドを取得します。

gcc -xc -E -v -

出力の最後に、私のマシンでこれを見ます:

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

最後から2番目の行に注意してください。つまり、Cファイルを#include <sys/stat.h>でコンパイルすると、gccは何もシンボリックリンクすることなく、/usr/include/x86_64-linux-gnu/sys/stat.h試行する前に検索し/usr/include/sys/stat.hます。


0

私のアーキテクチャはamd64なので、ありませんlibc6-dev-amd64。インストールするパッケージはlibc6-dev-i386です。

これにより、CPANパッケージの依存関係が修正されました。


「私のアーキテクチャはamd64なので、libc6-dev-amd64はありません:どういう意味ですか?
マークヴァンフーミッセン

つまり、x86_64アーキテクチャでは、librarys / kernel / etcです。パッケージにはamd64アーキテクチャがあります。そのため、libc6-dev-amd64はインストールできません。それでも問題は解決しませんが、一部のソフトウェアでは/ usr / include / sys /が表示されることを期待しています。
ヤリトゥルキア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.