In general, keep in mind that the directives and the functions are different things; the former are controlled by -fopenmp and the latter are controlled by linking to the OpenMP library.
-
(Updated to incorporate comments) Try using the
-fopenmpand-staticoptions to statically link OpenMP. Because this implies-lgomp -lrt, the following command won’t compile correctly unless you also specify the location oflibrt.a.gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a -o hello -
(Updated to incorporate comments) I imagine that the following command is compiling correctly because the OpenMP library is already in your library path and your system’s dynamic linker is automatically linking with
libgomp.so.gcc hello.c -fopenmp -o hello -
The following command is probably compiling properly because it is linking to the shared object for OpenMP (
libgomp.so). Note that the-staticoption is not used.gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o helloIf you don’t specify the
-fopenmpoption, OpenMP directives should be ignored.