错误未实现
我试图在Ubuntu 11.10上使用make
命令,但遇到错误。
g ++ -g -O2 -fPIC -fPIC -Wall -Winterinter-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 /代码-DRDKITVER ='“004000”'-I / usr / local / include -I / home / jochen / RDKit /代码-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 implementsiert:-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 ++ ,--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线程模型:posix gcc - 版本4.6.1(Ubuntu / Linaro 4.6.1-9ubuntu3)
这怎么解决?
gcc实现了-fexcess-precision
选项,但仅限于C.
该选项的文档可以在这里找到(搜索-fexcess-precision
)(这是gcc 4.6.3手册):
-fexcess-precision=
样式
此选项允许进一步控制机器上的超额精度,其中浮点寄存器比IEEE float
和double
精度类型具有更高精度,并且处理器不支持对这些类型进行四舍五入的操作。
[SNIP]
-fexcess-precision=standard
不适用于除C以外的语言,如果-funsafe-math-optimizations
或-ffast-math
则-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++
命令编写自己的包装器,它在从命令行参数中删除任何-fexcess-precision
事件后调用真正的g++
命令。 我过去做过类似的事情,情况稍有不同; 你必须破解它才能修改命令行参数,而不是过滤stderr
。 但我不推荐这个。 正确的解决方案是修复构建脚本或Makefile
- 同样假设程序不依赖于-fexcess-precision=standard
指定的行为。