2

makeUbuntu 11.10 でコマンドを使用しようとしていますが、エラーが発生します。

g++ -g -O2 -fPIC -fPIC -Wall -Wpointer-arith -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -fpic -Wno-deprecated -Wno-unused-関数 -I/usr/local/include -I/home/jochen/RDKit/Code -DRDKITVER='"004000"' -I/usr/local/include -I/home/jochen/RDKit/Code -DRDKITVER='" 004000"' -I. -私。-I/usr/include/postgresql/9.1/server -I/usr/include/postgresql/internal -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include/tcl8.5 -c -o adapter.o アダプター.cpp

cc1plus: nicht implementiert: -fexcess-precision=C++ の標準 make: * [adapter.o] Fehler 1

GCC、G++、および build-essentials をインストールしました。

からの出力gcc -v:

Es werden eingebaute Spezifikationen verwendet. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6.1/lto-wrapper Ziel: i686-linux-gnu Konfiguriert mit: ../src/configure -v --with-pkgversion=' Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ ,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included -gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.

これはどのように修正できますか?

4

1 に答える 1

2

gccは-fexcess-precisionオプションを実装しますが、Cに対してのみです。

オプションのドキュメントはここにあります(検索-fexcess-precision)(これはgcc 4.6.3マニュアルです):

-fexcess-precision=スタイル

floatこのオプションを使用すると、浮動小数点レジスタの精度がIEEEおよびdoubleタイプよりも高く、プロセッサがこれらのタイプに丸める演算をサポートしていないマシンで、過剰な精度をさらに制御できます 。

[をちょきちょきと切る]

-fexcess-precision=standardC以外の言語には実装されておらず、-funsafe-math-optimizationsまたは -ffast-mathが指定されている場合は効果がありません。x86では、 -mfpmath=sseまたは-mfpmath=sse+387が指定されている場合も効果はありません。前者の場合、IEEEセマンティクスは過度の精度なしで適用され、後者の場合、丸めは予測できません。

(a)C ++をコンパイルしている、(b)スクリプトまたはMakefile使用して-fexcess-precisionいる、および(c)変更できないとのことです。それらの1つは与える必要があります。スクリプトまたはMakefileにバグがあり、修正する必要があります。

gccはおそらくC++用に実装する必要があることに注意してください。-fexcess-precision=standard私の知る限り、この領域のC ++ルールはCと同じであり、Cは標準に準拠するためにこの動作を必要とします。コードがで指定された動作に依存している可能性が-fexcess-precision=standardあり、gccはそれをサポートしていません。その場合は、問題があります。それを回避する唯一の方法は、C++ソースコードに大きな変更を加えることかもしれません。または、C++の正しい動作を実装している可能性があります。その点でマニュアルは100%明確ではありません。

別の可能な回避策があります。コマンドライン引数からオカレンスを削除した後g++、実際のコマンドを呼び出すコマンドの独自のラッパーを作成できます。少し違う状況で、私は過去に似たようなことをしました。フィルタリングではなく、コマンドライン引数を変更するためにハックする必要があります。しかし、私はこれをお勧めしません。正しい解決策は、ビルドスクリプトを修正するか、プログラムがで指定された動作に依存しないと仮定することです。g++-fexcess-precisionstderrMakefile-fexcess-precision=standard

于 2012-03-12T20:49:06.207 に答える