Ubuntu与cc1plus - 错误未实现

时间:2012-03-12 19:04:03

标签: ubuntu gcc g++ rdkit

我正在尝试在Ubuntu 11.10上使用make命令,但是出错了。

  

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-function -I / usr / local / include -I / home / jochen / RDKit / Code -DRDKITVER ='“004000”' - I / usr / local / include -I / home / jochen / RDKit / Code -DRDKITVER ='“004000”' - 我。 -一世。 -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 adapter .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 =克++   COLLECT_LTO_WRAPPER = / usr / lib中/ GCC / i686的-Linux的GNU / 4.6.1 / LTO-包装   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。错误--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.6 --libdir = / usr / lib --enable-nls --with-sysroot = / --enable -clocale = gnu --enable-libstdcxx-debug --enable-libstdcxx-time = yes --enable-plugin --enable-objc-gc --enable-targets = all --disable-werror --with-arch-32 = i686 --with-tune = generic --enable-checking = release --build = i686-linux-gnu --host = i686- linux-gnu --target = i686-linux-gnu   Thread-Modell:posix   gcc-Version 4.6.1(Ubuntu / Linaro 4.6.1-9ubuntu3)

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

gcc实现了-fexcess-precision选项,但只实现了

可以找到该选项的文档here(搜索-fexcess-precision)(这是gcc 4.6.3手册):

  

-fexcess-precision=

     

此选项允许进一步控制机器上的过度精度   其中浮点寄存器的精度高于IEEE   floatdouble类型且处理器不支持   四舍五入到这些类型。

     

[SNIP]

     

-fexcess-precision=standard未针对其他语言实施   比C,并且如果-funsafe-math-optimizations或者没有效果   指定了-ffast-math。在x86上,它也没有效果   指定了-mfpmath=sse-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-precision命令。我过去做过something similar,情况略有不同;你必须破解它来修改命令行参数而不是过滤stderr。但我推荐这个。正确的解决方案是修复构建脚本或Makefile - 再次假设程序不依赖于-fexcess-precision=standard指定的行为。