2

我正在尝试make在 Ubuntu 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 implementationiert: -fexcess-precision=standard for 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=风格

此选项允许在浮点寄存器具有比 IEEE floatdouble类型更高的精度并且处理器不支持对这些类型进行四舍五入的操作的机器上进一步控制过度精度。

[剪辑]

-fexcess-precision=standard-funsafe-math-optimizations不为 C 以外的语言实现,如果指定或 则无效-ffast-math。在 x86 上,如果 指定-mfpmath=sseor也没有效果-mfpmath=sse+387;在前一种情况下,IEEE 语义在没有过多精度的情况下适用,而在后一种情况下,舍入是不可预测的。

您告诉我们 (a) 您正在编译 C++,(b) 您的脚本或Makefile使用-fexcess-precision,以及 (c) 您无法更改它。其中之一必须给予。您的脚本或 中有一个错误,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 回答