アップグレード後にgccが機能しなくなった


8

例として:

hsmyers@ubuntu:~/c_dev$ cat hello.c
#include <stdio.h>

int main(int argc,char **argv) {
printf("Hello World!\n");
return 0;
}
hsmyers@ubuntu:~/c_dev$ gcc -c -o hello.o hello.c
In file included from /usr/include/stdio.h:28:0,
             from hello.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.

エラーメッセージを修正しようとした後の途中のどこかで推測:

/ usr / bin / ld:crt1.oが見つかりません:そのようなファイルまたはディレクトリはありません

私は物事を完全に変更しました。誰かアドバイスしていただけますか?


libc-devはすでにインストールされていますか?それは私のためにうまくコンパイルされます。
itnet7

回答:


10

gcc-multilib64ビットのオペレーティングシステムに32ビット固有のヘッダーをもたらすパッケージをインストールする必要があります。


0

これは、新しいoneiricインストールで、私にとってはうまくいきます。/usr/include/x86_64-linux-gnu/bits/predefs.hlibc6-devパッケージによって提供されていますが、おそらく正しくインストールされていませんか?

次のコマンドでそのパッケージを「再インストール」できます。

sudo apt-get install --reinstall libc6-dev

ただし、そのファイルが存在する場合、コンパイラの検索パスがそのファイルの正しい場所を検索していないように見えます。次のコマンドを実行して確認できます。

gcc --verbose -o hello hello.c

インクルードファイルの検索パスを出力します。鉱山は言う:

    #include <...>検索はここから始まります:
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     / usr / local / include
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / usr / include / x86_64-linux-gnu
     / usr / include

同じではない場合、ビルドに必須のパッケージの一部にバージョンの不一致があると思います。gccとlibc6-devパッケージの正しいバージョンがあることを確認してください。現在oneiricでは、これらは次のようになります。

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 

--verbose試みの結果は以下のとおりです。
hsmyers

回答に返信するにはどうすればよいですか?少なくとも、私のバージョンのGCCは4.7.0で実験的としてリストされています。どのようにインストールされたかはわかりません。私の知る限り、libc6-devはインストールされています。私のインクルードパスは次のようになっています。ディレクトリとしてのビットや、その中のbits / predefs.hが見つかりません。再インストールしてみて、どうなるか見てみます。
hsmyers

再インストールしても違いはありませんでした。/ usr / include / i386-linux-gnu / bitsにビットが見つかりましたが、GCCインクルードパスの一部としては示されていません。libc6-devの私のバージョンはあなたのものと一致します。
hsmyers

実験的な(Ubuntu以外の標準の)gccバージョンが問題であることをお勧めします。それを削除して4.6.1をアーカイブからインストールすることをお勧めします。
Jeremy Kerr

私が考えていたもののほとんどは、知らないという小さな問題を除いて、a)どうやってそこに到達したのか、b)どうやってそれを取り除くのかです。apt-getはgccを削除しますか?それとも完全なパッケージ名が必要ですか?おそらくi686-pc-linux-gnu-4.7.0?
hsmyers

0

私のavr-gccコンパイラにも同じ問題がありました。

/ usr / include / i386-linux-gnu /内のファイルとフォルダーを、avr-gccが-filesを検索するフォルダーにリンクしました。例:/ usr / lib / avr / include /

ln -s /usr/include/i386-linux-gnu/* /usr/lib/avr/include/

多分同様の何かがgccで動作します。に

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.