我正在尝试在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)
如何解决这个问题?
答案 0 :(得分:2)
gcc实现了-fexcess-precision
选项,但只实现了。
可以找到该选项的文档here(搜索-fexcess-precision
)(这是gcc 4.6.3手册):
-fexcess-precision=
式此选项允许进一步控制机器上的过度精度 其中浮点寄存器的精度高于IEEE
float
和double
类型且处理器不支持 四舍五入到这些类型。[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
指定的行为。