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 helloActualizació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 helloActualizació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
-fopenmpy-fopenmppara 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 helloEl 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-staticno se utiliza.gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o helloSi no especifica la opción
-fopenmp, las directivas de OpenMP deben ignorarse.