ошибка с gcc 5 для функции varargs: суффикс или операнды недействительны для `movq'

При попытке установить OpenMPI файл .configure не удалось выполнить в разделе, проверяющем способность ISO C99 выбранного компилятора.

Озадаченный тем, что gcc, конечно же, имеет обе опции std=gnu99 и std=c99, я вырезал файл конфигурации из 20 000 строк, чтобы изолировать проблемный раздел. В конце концов я проследил это до gcc 5, не компилирующего функции с переменными аргументами.

Приведенный ниже код генерирует ошибку «суффикс или операнды недействительны для `movq'», что является основной причиной сбоя файла .configure.

(Пошаговая установка OpenMPI, которой я следовал, находится здесь https://wiki.helsinki.fi/display/HUGG/Installing+Open+MPI+on+Mac+OS+X)

Кто-нибудь видел это и знает, как это исправить?

//-----------------------------------------------------------------------------
// This fails to compile with gcc 5.3
//
// Command: gcc test4.c
//
// Error is: 
//  /var/folders/4s/gkkpz000gn/T//ccAraq59.s:47:suffix or operands invalid for `movq'
//  /var/folders/4s/gkg0r000gn/T//ccAraq59.s:52:suffix or operands invalid for `movq'
//
// gcc version is 5.3.0:
//
// $ gcc --version
// gcc (GCC) 5.3.0
// Copyright (C) 2015 Free Software Foundation, Inc.
// This is free software; see the source for copying conditions.  There is NO
// warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
//-----------------------------------------------------------------------------


// Check varargs
static void
test_varargs (const char *format, ...)
{
}


//--------------------------------------------------------------
//                         MAIN {}   
//--------------------------------------------------------------

 int
 main ()
 {

    //====================================================
    // Check varargs.
    // test_varargs ("s", "string");            //WORKS
    // test_varargs ("d' ", 65);                //WORKS
    // test_varargs ("s, d' ", "string", 65);   //WORKS

    test_varargs ("f .", 34.234);                       // FAILS!!!
    test_varargs ("s, d' f .", "string", 65, 34.234);   //ALSO FAILS
    //====================================================


   return 0;
 }

person ppl4world    schedule 24.12.2015    source источник
comment
Можешь выложить промежуточную сборку?   -  person Ignacio Vazquez-Abrams    schedule 25.12.2015
comment
@ IgnacioVazquez-Abrams В итоге я удалил все установленные версии gcc, поскольку казалось, что между установкой Xcode и установкой brew возник конфликт. затем обновление до XCode 7 с 6 и удаление g++ также устранили проблему. Благодарю за ваш ответ!   -  person ppl4world    schedule 26.12.2015


Ответы (1)


TLDR: конфликт между установками brew и XCode gcc.

В итоге я удалил все установленные версии gcc, удалил g++, удалив все оставшиеся оборванные ссылки. Затем я обновился с XCode 6 до 7 и использовал идущую вместе с ним версию gcc. Это устранило вышеуказанную проблему. Удаление всех висящих символических ссылок и разархивированного tar-шара OpenMPI, а затем повторное распаковывание позволило установить OpenMPI без проблем. cd ./examples, make all, mpirun -np 4 hello_c сработало, и мы успешно установили MPI.

person ppl4world    schedule 26.12.2015