Spécifier OpenMP pour GCC
Pour OpenMP, lorsque mon code est l'utilisation des fonctions de son API (par exemple, omp_get_thread_num ()), sans l'aide de ses directives (comme ceux de #pragma omp ...),
-
pourquoi spécifiant directement libgomp.un de
gcc au lieu de l'aide -fopenmp
ne fonctionne pas, commegcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a -o hello
Mise à jour: je viens de trouver ce qui relie à libgomp.un ne fonctionne pas, mais en les reliant à libgomp.donc il fonctionne. Signifie-t-il OpenMP ne peut pas être statique lié?
-
Pourquoi -fopenmp ne fonctionne que sans
spécifier les fichiers de bibliothèquegcc hello.c -fopenmp -o hello
Mise à jour: En d'autres termes, lors de l'utilisation d'-fopenmp, pourquoi la liaison explicite à libgomp.il n'est donc pas nécessaire?
-
Pourquoi est-ce aussi de la compilation:
gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
Sera-ce ignorer les directives OpenMP
dans le code si il est tout?
Merci et salutations!
- À partir de la documentation de GCC: -fopenmp drapeau arrange aussi pour la liaison automatique de la OpenMP la bibliothèque d'exécution. Voir ici: gcc.gnu.org/onlinedocs/libgomp/...
Vous devez vous connecter pour publier un commentaire.
En général, gardez à l'esprit que les directives et les fonctions sont des choses différentes; les premières sont contrôlées par
-fopenmp
et ceux-ci sont contrôlés par un lien vers la bibliothèque OpenMP.(Mis à jour afin d'intégrer les observations), Essayez d'utiliser le
-fopenmp
et-static
options de lien statique OpenMP. Parce que cela implique-lgomp -lrt
, la commande suivante ne compile pas correctement à moins que vous pouvez également spécifier l'emplacement delibrt.a
.(Mis à jour afin d'intégrer les observations) j'imagine que la commande suivante compile correctement parce que la bibliothèque OpenMP est déjà dans votre chemin de la bibliothèque et de votre système dynamique de linker automatiquement le lien avec
libgomp.so
.La commande suivante est probablement compiler correctement, car il est le lien à l'objet partagé pour OpenMP (
libgomp.so
). Notez que le-static
option est pas utilisé.Si vous ne spécifiez pas le
-fopenmp
option, directives OpenMP doit être ignorée.-fopenmp
drapeau.