Скомпилируйте Cilk plus в GCC5.2.0

Кто-нибудь знает, как правильно скомпилировать следующий код с Cilk plus в gcc5.2.0? С gcc -fcilkplus * или g++ я всегда получаю ошибки.

#include <cilk/cilk.h>
#include <assert.h>

int fib(int n) {
    if (n < 2)
    return n;
    int a = cilk_spawn fib(n-1);
    int b = fib(n-2);
    cilk_sync;
    return a + b;
}

int main() {
    int result = fib(30);
    assert(result == 832040);
    return 0;
} 

результат:

Undefined symbols for architecture x86_64:
  "___cilkrts_enter_frame_1", referenced from:
      fib(int) in ccY1qrGL.o
  "___cilkrts_enter_frame_fast_1", referenced from:
      __cilk_spn_0 in ccY1qrGL.o
  "___cilkrts_leave_frame", referenced from:
      fib(int) in ccY1qrGL.o
      __cilk_spn_0 in ccY1qrGL.o
  "___cilkrts_rethrow", referenced from:
      fib(int) in ccY1qrGL.o
  "___cilkrts_save_fp_ctrl_state", referenced from:
      fib(int) in ccY1qrGL.o
  "___cilkrts_sync", referenced from:
      fib(int) in ccY1qrGL.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

В Интернете очень мало тем об этом. Спасибо

1 ответ

GCC настроен на добавление -lcilkrts по умолчанию к своей команде компоновщика, когда пользователи задают -fcilkplus, но это поведение по умолчанию может быть переопределено, если есть какая-либо конфигурация для конкретной платформы. Я думаю, что это происходит в OS X, но это должно быть исправлено, по моему мнению. В любом случае, похоже, что нет другого краткосрочного решения, кроме добавления -lcilkrts, как предложено выше.

Другие вопросы по тегам