0

fbounds チェックを機能させようとしましたが、成功しませんでした。次のエラーが表示されます。

/tmp/cczxKZzn.s: アセンブラ メッセージ:

/tmp/cczxKZzn.s:48: エラー: 「プッシュ」の無効な命令サフィックス

/tmp/cc9xD8T3.s:125: エラー: `pop' の無効な命令サフィックス

私のメイクファイルは次のようになります(単純なメイクファイルでは、すべてが適切にコンパイルされています):

all: error check

error: error.c
    /usr/local/gcc-4.0.2/bin/gcc -fbounds-checking -g -Wall -pedantic $< -o $@

.PHONY: clean check

clean:
    -rm error

check:  error
    ./error

そのコードはアセンブラとは関係がないので、どうすればよいかわかりません。アセンブラーの問題は、そのトピックに関する Google 検索で確認できる唯一の問題です。


たとえば、配列の外側にあることを確認する他のソリューションを提案できますか? など(これは私のerror.cです):

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int a[1][10];
  a[0][11]=42;
  return 0;
}

編集。バージョンに互換性がない可能性があります。gcc 4.4+ がインストールされており、少し変更された gcc 4.0.2 へのパスでそれを行っていますか?

4

2 に答える 2

1

そのコードはアセンブラとは関係がないので、どうすればよいかわかりません。アセンブラーの問題は、そのトピックに関する Google 検索で確認できる唯一の問題です。

間違ったアセンブラ (32 ビットのアセンブラ) を呼び出して、64 ビットのオブジェクト コードをコンパイルしようとしているようです。PATH とフラグを確認してください。

更新: gcc がそのコンポーネントをどのように正確に呼び出すかを調べたことはありません。私にはまだよくわかりません。とにかく、私が信じていたように PATH に依存していないように見えますが、./configure 設定 (--prefix、--build など) に依存しているようです。

私の場合 --prefix=/usr、 --build=x86_64-suse-linux, --program-suffix=-4.6 , looks for its components in (with respect to the directory where thegcc` バイナリが存在します: - ../lib64/gcc/x86_64-suse-linux/4.6 - ../lib64/gcc/ - ../lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/x86_64-suse-linux/4.6/ - ../lib64/ gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/

( で確認strace)。

これらのディレクトリのいずれかに別の gcc からのバイナリが存在すると、「正しい」ディレクトリの代わりに呼び出されます。

gcc -vで(または でstrace)チェックして、どちらasが実行されているかを確認してください。

于 2012-08-22T21:48:15.643 に答える