omp - Especificar OpenMP a GCC
openmp tutorial español (1)
Para OpenMP, cuando mi código usa las funciones en su API (por ejemplo, omp_get_thread_num ()) sin usar sus directivas (como aquellas #pragma omp ...),
por qué especificar directamente libgomp.a a gcc en lugar de usar -fopenmp no funciona, como
gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a -o hello
Actualización: acabo de encontrar que el enlace a libgomp.a no funciona, pero el enlace a libgomp.so funciona. ¿Significa que OpenMP no puede estar enlazado estáticamente?
Por qué -fopenmp solo funciona sin especificar los archivos de la biblioteca
gcc hello.c -fopenmp -o hello
Actualización: En otras palabras, cuando se usa -fopenmp, ¿por qué no se requiere un enlace explícito a libgomp.so?
¿Por qué esto también compila:
gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
¿Ignorará esto las directivas OpenMP en el código si las hay?
¡Gracias y saludos!
En general, tenga en cuenta que las directivas y las funciones son cosas diferentes; los primeros se controlan mediante -fopenmp
y los últimos se controlan mediante el enlace a la biblioteca OpenMP.
( Actualizado para incorporar comentarios ) Intente usar las opciones
-fopenmp
y-fopenmp
para vincular estáticamente OpenMP. Debido a que esto implica-lgomp -lrt
, el siguiente comando no se compilará correctamente a menos que también especifique la ubicación delibrt.a
.gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a -o hello
( Actualizado para incorporar comentarios ) Imagino que el siguiente comando se está compilando correctamente porque la biblioteca OpenMP ya está en la ruta de su biblioteca y el enlazador dinámico de su sistema se está vinculando automáticamente con
libgomp.so
.gcc hello.c -fopenmp -o hello
El siguiente comando probablemente se está compilando correctamente porque está enlazando con el objeto compartido para OpenMP (
libgomp.so
). Tenga en cuenta que la opción-static
no se utiliza.gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
Si no especifica la opción
-fopenmp
, las directivas de OpenMP deben ignorarse.