error Not Implemented
I am trying to use the make
command on Ubuntu 11.10, but get an error.
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. -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 adapter.cpp
cc1plus: nicht implementiert: -fexcess-precision=standard for C++ make: * [adapter.o] Fehler 1
I have installed GCC, G++, and the build-essentials.
Output from 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.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)
How can this be fixed?
gcc implements the -fexcess-precision
option, but only for C.
The documentation for the option can be found here (search for -fexcess-precision
) (this is the gcc 4.6.3 manual):
-fexcess-precision=
style
This option allows further control over excess precision on machines where floating-point registers have more precision than the IEEE float
and double
types and the processor does not support operations rounding to those types.
[SNIP]
-fexcess-precision=standard
is not implemented for languages other than C, and has no effect if -funsafe-math-optimizations
or -ffast-math
is specified. On the x86, it also has no effect if -mfpmath=sse
or -mfpmath=sse+387
is specified; in the former case, IEEE semantics apply without excess precision, and in the latter, rounding is unpredictable.
You've told us that (a) you're compiling C++, (b) your script or Makefile
uses -fexcess-precision
, and (c) you can't change it. One of those has got to give. You have a bug in your script or Makefile
, and you need to fix it.
Note that gcc probably should implement -fexcess-precision=standard
for C++; as far as I know, C++ rules in this area are the same as C's and C requires this behavior for standard conformance. It's possible that your code depends on the behavior specified by -fexcess-precision=standard
, and that gcc just doesn't support it. If that's the case, you've got a problem; it may be that the only way to work around it would be to make major modifications to your C++ source code. Or it may be that it implements the right behavior for C++; the manual isn't 100% clear on that point.
There is another possible workaround. You could write your own wrapper for the g++
command that invokes the real g++
command after deleting any occurrences of -fexcess-precision
from its command line arguments. I've done something similar in the past, for a slightly different situation; you'd have to hack it to modify command-line arguments rather than filtering stderr
. But I do not recommend this. The right solution is to fix the build script or Makefile
-- assuming, again, that the program doesn't depend on the behavior specified by -fexcess-precision=standard
.
上一篇: gcc和g ++库搜索路径
下一篇: 错误未实现