Ответ 1
В общем, имейте в виду, что директивы и функции - это разные вещи; первые управляются -fopenmp
, а последние контролируются путем связывания с библиотекой OpenMP.
-
(Обновлено для добавления комментариев). Попробуйте использовать параметры
-fopenmp
и-static
для статической ссылки на OpenMP. Поскольку это означает-lgomp -lrt
, следующая команда не будет компилироваться правильно, если вы также не укажете местоположениеlibrt.a
.gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a -o hello
-
(Обновлено для включения комментариев) Я предполагаю, что следующая команда компилируется правильно, потому что библиотека OpenMP уже находится в вашем пути к библиотеке, и динамический компоновщик системы автоматически связывается с
libgomp.so
.gcc hello.c -fopenmp -o hello
-
Следующая команда, вероятно, правильно компилируется, потому что она ссылается на общий объект для OpenMP (
libgomp.so
). Обратите внимание, что параметр-static
не используется.gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
Если вы не укажете опцию
-fopenmp
, директивы OpenMP следует игнорировать.