2016-12-29 15 views
2

私のファイル "six.cpp"にフロートを印刷しようとしましたが、コンパイラはエラーをスローし続けます。私は-vタグを使用して、次の出力を得るg++ six.cppを使用してコンパイルしようとすると、その後G ++はfloatを不正な命令とみなします

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main(){ 
    double f = 5.3; 
    cout << f << endl; 
    return 0; 
} 

:ここでは、ファイル「six.cpp」です。

Using built-in specs. 
COLLECT_GCC=gcc 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/lto-wrapper.exe 
Target: x86_64-pc-cygwin 
Configured with: /cygdrive/i/szsz/tmpp/gcc/gcc-4.9.3-1.x86_64/src/gcc-4.9.3/configure --srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-4.9.3-1.x86_64/src/gcc-4.9.3 --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --enable-__cxa_atexit --with-dwarf2 --with-tune=generic --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-libada --enable-libgcj-sublibs --disable-java-awt --disable-symvers --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id 
Thread model: posix 
gcc version 4.9.3 (GCC) 
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64' 
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/cc1plus.exe -quiet -v -Dunix -idirafter /usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../lib/../include/w32api -idirafter /usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../x86_64-pc-cygwin/lib/../lib/../../include/w32api six.cpp -quiet -dumpbase six.cpp -mtune=generic -march=x86-64 -auxbase six -version -o /tmp/ccfHbtlL.s 
GNU C++ (GCC) version 4.9.3 (x86_64-pc-cygwin) 
     compiled by GNU C version 4.9.3, GMP version 6.0.0, MPFR version 3.1.2-p11, MPC version 1.0.3 
warning: GMP header version 6.0.0 differs from library version 6.1.0. 
warning: MPFR header version 3.1.2-p11 differs from library version 3.1.3. 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
ignoring nonexistent directory "/usr/local/include" 
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../x86_64-pc-cygwin/include" 
ignoring duplicate directory "/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../x86_64-pc-cygwin/lib/../lib/../../include/w32api" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/include/c++ 
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/include/c++/x86_64-pc-cygwin 
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/include/c++/backward 
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/include 
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/include-fixed 
/usr/include 
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../lib/../include/w32api 
End of search list. 
GNU C++ (GCC) version 4.9.3 (x86_64-pc-cygwin) 
     compiled by GNU C version 4.9.3, GMP version 6.0.0, MPFR version 3.1.2-p11, MPC version 1.0.3 
warning: GMP header version 6.0.0 differs from library version 6.1.0. 
warning: MPFR header version 3.1.2-p11 differs from library version 3.1.3. 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
Compiler executable checksum: a7b6fac296390f5db29d753ab65194e7 
six.cpp:6:3: internal compiler error: Illegal instruction 
    double f = 5.3; 
^
Please submit a full bug report, 
with preprocessed source if appropriate. 
See <http://gcc.gnu.org/bugs.html> for instructions. 

C++でプログラミングを開始したばかりなので、なぜこれが起こっているのか非常に混乱しています。私もいくつかのGoogleの検索を行って、これについて何も見つかりませんでした。

+1

1.あなたのコードはGMPとMPFRにリンクしているのはなぜですか? AFAIK、これらは複数の高精度ライブラリであり、どこに必要なのか分かりません。明らかに、GMPとMPFRのヘッダーはライブラリと一致しません。 3. * internal *コンパイラエラーが発生したようです。あなたの設定が間違っているかもしれません。すべてを削除し、適切にcygwinをインストールしてください。 –

+1

@Rudy:GNUコンパイラのコレクションは内部でそれらを使用しています。 –

+0

@BenVoigt:OK、私はそれを知らなかった。ヘッドアップをありがとう。 –

答えて

7

internal compiler error: Illegal instructionがあります。これは、gccコンパイラ自体が失敗したことを意味します。あなたがgccツールチェーンを誤ってインストールしたような警告が表示されます。それを取り外し、再インストールまたはアップグレードしてみてください。

4

ここで失敗したソースコードの部分は特に興味深いわけではありませんが、重要なビットは「内部コンパイラエラー:不正な命令」です。

これはg ++のコピーが、実行しているCPUよりも新しいサブアーキテクチャ用に作成されていることを意味します。たとえば、SSE4命令は2006年に導入され、古いCPU設計ではサポートされていません。 SSEは浮動小数点計算に使用されるため、浮動小数点リテラルを見つけるとエラーが発生しますが、根本原因は命令セットの不一致です。

/proc/cpuinfoにチェックを付けると、CPUにどのような命令セット拡張がサポートされているかを知ることができます。これは正しいg ++ビルドオプションを選択するのに役立ちます。

特に、the ones listed here、特に-march=,-mfpmath=、および-m(no)fused-maddです。

関連する問題