だから私は通常のユーザーとしてコンパイル中に私のサーバーが動作を停止しました。 Debian 安定版を使用しています。私のシステムで何が変更され、この問題が発生したのか、それを解決する方法を想像することはできませんが、ルートのみをコンパイルできます。
user@box:~/code/helloworld$ gcc helloworld.c -o helloworld
In file included from /usr/include/stdio.h:28:0,
from helloworld.c:3:
/usr/include/features.h:356:25: fatal error: /usr/local/include/sys/cdefs.h: Permission denied
compilation terminated.
ルートにコンパイルするだけです。これが権限の問題だと思いますか?
As user@server:
ls -la /usr/local/include/sys/cdefs.h
ls: cannot access /usr/local/include/sys/cdefs.h: Permission denied
ls -la /usr/local/include/sys/
ls: cannot access /usr/local/include/sys/.: Permission denied
ls: cannot access /usr/local/include/sys/..: Permission denied
ls: cannot access /usr/local/include/sys/apparmor.h: Permission denied
ls: cannot access /usr/local/include/sys/cdefs.h: Permission denied
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? apparmor.h
-????????? ? ? ? ? ? cdefs.h
/usr/local/include はユーザーが読むことができます。 Rootは、/usr/local/include/sysに対する権限が次のようになることを示しています(ユーザーがStaffグループにあることに注意してください)。
drwxr-Sr-- 2 ルートスタッフ 4096 12月7日 08:20 システム
cdefs.hの場所
locate cdefs.h
/usr/include/ldap_cdefs.h
/usr/include/i386-linux-gnu/sys/cdefs.h
/usr/include/sys/cdefs.h
/usr/local/include/sys/cdefs.h
パーマを修正しようとしましたが修正できません。 /usr/localのcdefs.hを無視して/usr/include/のcdefs.hを使用する方法はありますか?
どんな助けでも大変感謝します!
答え1
完全に無視できる特別な方法はないと思います(gccnostdinc
スイッチを使用できますが、必要なすべてのパスに-Iを追加する必要があります)。
しかし、コンパイラに必要なものを選択させる簡単な方法があります。 ~によるとhttp://gcc.gnu.org/onlinedocs/cpp/Search-Path.html、パスを含む一般的な順序は次のとおりです。
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
おそらく、これはローカルユーザーとしてシステムを簡単にオーバーライドできるようにすることです。しかし、これらすべてを優先するのは-Iなので、コンパイルすると次のようになります。
gcc -I/usr/include/sys
これで選択されます。cdfs.hそこから。パスから/usr/local/includeを削除しないため、このカテゴリに属する他のファイルがある場合は、より多くの-Iが必要になる場合があります。再帰的ではありません。たとえば、次のようになります。
gcc -I/usr/include
/usr/include/sys は、他のバージョンが /usr/include の優先順位を指定しないように、優先順位を付けません。したがって、次のものが必要な場合があります。
gcc -I/usr/include -I/usr/include/sys
ちなみに、makefileを使用すると、これらの操作がはるかに簡単になります。結局のところ、これを行う方法を学びたいと思います。
このヘッダーが繰り返される理由とは関係のない他の問題が発生する可能性がありますが、これについて説明する必要があります。これはあなたのシステムですか?
答え2
パーマを修正しようとしましたが修正できません。 /usr/localのcdefs.hを無視して/usr/include/のcdefs.hを使用する方法はありますか?
はい、にインストールしないでください/usr/local/
。 Debian は何もインストールしないので、/usr/local
ここにファイルがある場合、これはあなた、他のローカル管理者、または誤ってパッケージ化されたソフトウェアがこのエントリをここにインストールしたためです。他の場所に設置してください。ただし、/usr/localに別のlibcヘッダーファイルをインストールすると問題が発生します。