Ubuntu с cc1plus - ошибка не реализована - PullRequest
2 голосов
/ 12 марта 2012

Я пытаюсь использовать команду make в Ubuntu 11.10, но получаю ошибку.

g ++ -g -O2 -fPIC -fPIC -Wall -Wpointer-arith -Wendif-label-Wformat-security -fno-строго-псевдонимы -fwrapv -fexcess-precision = standard -g -fpic -Wno-deprecated -Wno-неиспользуемые -функция -I / usr / local / include -I / home / jochen / RDKit / Code-DRDKITVER = '"004000"' -I / usr / local / include -I / home / jochen / RDKit / Code -DRDKITVER = '"004000"' -I.-Я.-I / usr / include / postgresql / 9.1 / сервер -I / usr / include / postgresql / internal -D_GNU_SOURCE -I / usr / include / libxml2 -I / usr / include / tcl8.5 -c -o adapter.o адаптер.cpp

cc1plus: nicht Implementiert: -fexcess-precision = стандарт для C ++ make: * [adapter.o] Fehler 1

Я установил GCC, G ++ и основы сборки.

Вывод из 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-суффикс = -4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir = / usr / lib --without-enabled-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 = да --enable-plugin --enable-objc-gc --enable-цели = все --disable-werror --with-arch-32 = i686 --with-tune = универсальный --enable-проверочный = выпуск --build = i686-linux-gnu --host = i686-linux-gnu --target = i686-linux-gnu Thread-Modell: posix gcc-Версия 4.6.1 (Ubuntu / Linaro 4.6.1-9ubuntu3)

Как это можно исправить?

1 Ответ

2 голосов
/ 13 марта 2012

gcc реализует опцию -fexcess-precision, но только для C.

Документацию для опции можно найти здесь (поиск -fexcess-precision)(это руководство по gcc 4.6.3):

-fexcess-precision= style

Этот параметр позволяет дополнительно контролировать избыточную точность на станках с плавающей точкойрегистры имеют большую точность, чем типы 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, вероятно, должен реализовать -fexcess-precision=standard для C ++;Насколько я знаю, правила C ++ в этой области такие же, как C, и C требует такого поведения для стандартного соответствия.Возможно, ваш код зависит от поведения, указанного -fexcess-precision=standard, и что gcc просто не поддерживает его.Если это так, у вас есть проблема;может случиться так, что единственный способ обойти это - сделать серьезные изменения в исходном коде C ++.Или, может быть, он реализует правильное поведение для C ++;руководство не является на 100% ясным по этому вопросу.

Существует еще один возможный обходной путь.Вы можете написать свою собственную оболочку для команды g++, которая вызывает настоящую команду g++ после удаления любых вхождений -fexcess-precision из аргументов командной строки.Я сделал нечто подобное в прошлом, для немного другой ситуации;вам придется взломать его, чтобы изменить аргументы командной строки вместо фильтрации stderr.Но я не рекомендую это.Правильным решением является исправление сценария сборки или Makefile - при условии, опять же, что программа не зависит от поведения, указанного в -fexcess-precision=standard.

...