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?
Best Answer
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):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 orMakefile
, 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 realg++
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 filteringstderr
. But I do not recommend this. The right solution is to fix the build script orMakefile
-- assuming, again, that the program doesn't depend on the behavior specified by-fexcess-precision=standard
.