2017-08-27 3 views
2

J'ai l'installation du compilateur Intel au $HOME/tpl/intel suivant. Quand je Dressez une hello_omp.cpp simple avec openMP permisexplicitement lier intel icpc openmp

#include <omp.h> 
#include <iostream> 

int main() 
{ 
#pragma omp parallel 

    { 
     std::cout << "Hello World" << std::endl; 
    } 
    return 0; 
} 

Je compilez avec ~/tpl/intel/bin/icpc -O3 -qopenmp hello_omp.cpp mais quand je cours, je reçois l'erreur suivante: ./a.out: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory.

Je voudrais explicitement lier le compilateur intel et la bibliothèque appropriée pendant le processus make sans utiliser le LD_LIBRARY_PATH?

+0

Je pense que vous pouvez utiliser 'ld'' -rpath = dir' pour faire un chemin de recherche de bibliothèque supplémentaire dans vos exécutables. Ne pas poster comme réponse parce que je ne suis pas sûr. Ou vous pouvez ajouter le chemin d'accès à '/ etc/ld.so.conf.d/something.conf' et lancer' ldconfig' pour ajouter le répertoire de la bibliothèque de l'icpc aux chemins de recherche de votre bibliothèque système, si vous utilisez un système Linux ou celui qui utilise aussi 'ldconfig' de cette façon. –

Répondre

1

Vous avez 2 solutions simples pour votre problème:

  1. La liaison statique avec les bibliothèques d'exécution Intel:
    ~/tpl/intel/bin/icpc -O3 -qopenmp -static_intel hello_omp.cpp
    • Avantages: vous ne devez pas prendre soin où la course Intel l'environnement de temps est installé sur la machine où vous exécutez le binaire, ou même l'avoir installé complètement; Inconvénients: votre binaire devient plus grand et ne permet pas de sélectionner un environnement d'exécution différent (idéalement plus récent) même s'il est disponible.
  2. Ajout du chemin de recherche de bibliothèque dynamique dans le binaire en utilisant l'option de liaison -rpath:
    ~/tpl/intel/bin/icpc -O3 -qopenmp -Wl,-rpath=$HOME/tpl/intel/lib/intel64 hello_omp.cpp
    Notez l'utilisation de -Wl, pour transmettre l'option de l'éditeur de liens.
    Je suppose que cela ressemble plus à ce que vous recherchiez que la première solution que j'ai proposée, alors je vous laisse imaginer ce que le pour et le contre sont pour vous en comparaison.
+0

L'option 1 fonctionne. En utilisant la deuxième option, je reçois toujours la même erreur './a.out: erreur lors du chargement des bibliothèques partagées: libiomp5.so: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire' – kirikoumath

+1

Le chemin d'accès réel à la bibliothèque iomp5 peut être différent de ce que je mets si vous avez besoin de l'ajuster. De plus, je ne suis pas sûr que le signe '~' fonctionnera dans ce contexte, donc vous devrez peut-être le remplacer par le chemin complet correspondant. Juste expérimenter un peu comme cela devrait fonctionner. – Gilles

+0

'-rpath' a besoin du chemin absolu. Donc '-rpath = $ HOME/tpl/intel/lib/intel64' a fonctionné pour moi. Je vous remercie beaucoup pour votre aide. – kirikoumath

0

compilateur Intel script de navires dans le répertoire bin qui, lorsqu'il provient définira les variables d'environnement appropriées comme LD_LIBRARY_PATH, LIBRARY_PATH et PATH avec les bons répertoires qui bibliothèque hôte OpenMP d'exécution et d'autres bibliothèques spécifiques du compilateur comme libsvml (court bibliothèque mathématique vectorielle) ou libimf (version plus optimisée de libm).