Casablanca: Ошибка сборки gcc 4.8.1 на linux centos
Я пытаюсь создать casablanca, как говорят на их странице. Потому что у меня gcc-4.8.1
, установленный с помощью CXX=gcc-4.8
, это не нормально, поэтому я удалил его, просто:
cmake .. -DCMAKE_BUILD_TYPE=Release
Он создает файлы, и когда я делаю make
, я получаю следующие ошибки:
Scanning dependencies of target casablanca
[ 1%] Building CXX object src/CMakeFiles/casablanca.dir/streams/linux/fileio_linux.cpp.o
/tmp/ccoWLl81.s: Assembler messages:
/tmp/ccoWLl81.s:97: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:188: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:298: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:310: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:322: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:334: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:371: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:494: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:508: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:522: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:536: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:550: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:2028: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:2057: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:2086: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:3975: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:6186: Error: expecting string instruction after `rep'
/tmp/ccoWLl81.s:10355: Error: expecting string instruction after `rep'
make[2]: *** [src/CMakeFiles/casablanca.dir/streams/linux/fileio_linux.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/casablanca.dir/all] Error 2
make: *** [all] Error 2
Кто-нибудь встретил эту проблему? Это из-за gcc4.8.1? Как это исправить?
Ответы
Ответ 1
Проблема в том, что gcc 4.8 генерирует инструкции "rep; ret", чтобы избежать штрафа за производительность для чипов AMD. Старые ассемблеры обнаруживают это как ошибку.
Подробности здесь:
https://gcc.gnu.org/ml/gcc-help/2011-03/msg00286.html
Исправление состоит в том, чтобы обновить binutils, чтобы вы получили более новую версию ассемблера, который принимает эту инструкцию.
Ответ 2
sudo yum update binutils
--- > Будет обновлен пакет binutils.x86_64 0: 2.22.52.0.1-10.36.amzn1
--- > Пакет binutils.x86_64 0: 2.23.52.0.1-30.64.amzn1 будет обновляться