2
votes

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?

1
@p.campbell looks like it says "not implemented" in GermanFlexo♦
The flag -fexcess-precision is only supported in GCC 4.5 or later. Which version of gcc do you have? You can type gcc --version at a terminal to find out. I thought Ubuntu 11.10 had 4.6?Troubadour
Workaround: don't use -fexcess-precision=standard if it's not implementedFlexo♦
gcc and g++ are both 4.6.1...i can't edit the file which will execute this command...i only do make in an directory and this is the outputbladepit
@bladepit can you post g++ -v output?Karlson

1 Answers

2
votes

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.