2017-08-27 8 views
2

Ich habe den Intel Compiler bei der folgenden $HOME/tpl/intel installieren. Wenn ich kompilieren eine einfache hello_omp.cpp mit OpenMPexplizit verknüpfen Intel icpc openmp

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

int main() 
{ 
#pragma omp parallel 

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

ich mit ~/tpl/intel/bin/icpc -O3 -qopenmp hello_omp.cpp kompilieren, aber wenn ich laufen bekomme ich folgende Fehlermeldung: ./a.out: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory.

Ich möchte explizit den Intel Compiler und die entsprechende Bibliothek während des Make-Prozesses ohne die Verwendung der LD_LIBRARY_PATH verknüpfen?

+0

Ich denke, Sie können 'ld's' -rpath = dir' verwenden, um einen zusätzlichen Bibliothekssuchpfad in Ihre ausführbaren Dateien zu brennen. Ich schreibe nicht als Antwort, weil ich mir nicht sicher bin. Oder Sie könnten den Pfad zu einer '/ etc/ld.so.conf.d/something.conf' hinzufügen und' ldconfig' ausführen, um das icpc-Bibliotheksverzeichnis den Suchpfaden Ihrer Systembibliothek hinzuzufügen, wenn Sie sich auf einem Linux-System befinden oder eine, die auf diese Weise auch 'ldconfig' verwendet. –

Antwort

1

Sie haben zwei einfache Lösungen für Ihr Problem:

  1. Verknüpfung statisch mit den Intel Laufzeitbibliotheken:
    ~/tpl/intel/bin/icpc -O3 -qopenmp -static_intel hello_omp.cpp
    • Vorteile: Sie haben nicht, wo die Intel laufen zu kümmern Die Zeitumgebung ist auf der Maschine installiert, auf der Sie die Binärdatei ausführen oder sogar installiert haben.
    • Nachteile: Ihre Binärdatei wird größer und lässt keine andere (neuere, idealerweise) Laufzeitumgebung zu, selbst wenn sie verfügbar ist.
  2. Hinzufügen der Suchpfad für die dynamische Bibliothek in das binäre unter Verwendung der Linkeroption -rpath:
    ~/tpl/intel/bin/icpc -O3 -qopenmp -Wl,-rpath=$HOME/tpl/intel/lib/intel64 hello_omp.cpp
    Beachten Sie die Verwendung von -Wl, die Möglichkeit, an den Linker zu übertragen.
    Ich denke, das ist mehr wie das, was Sie suchten, als die erste Lösung, die ich vorgeschlagen habe, damit ich Sie im Vergleich die Vor- und Nachteile für Sie ersinnen lassen kann.
+0

Option 1 funktioniert. Mit der zweiten Option bekomme ich immer noch den gleichen Fehler './a.out: Fehler beim Laden freigegebener Bibliotheken: libiomp5.so: kann keine gemeinsame Objektdatei öffnen: Keine solche Datei oder Verzeichnis' – kirikoumath

+1

Der tatsächliche Pfad zur iomp5-Bibliothek könnte sei anders als das, was ich habe, also musst du es vielleicht anpassen. Darüber hinaus bin ich mir nicht sicher, ob das Zeichen "~" in diesem Kontext funktioniert, also müssen Sie es möglicherweise durch den entsprechenden vollständigen Pfad ersetzen. Experimentieren Sie ein bisschen, wie es funktionieren sollte. – Gilles

+0

'-rpath' benötigt den absoluten Pfad. Also '-rpath = $ HOME/tpl/intel/lib/intel64' hat für mich funktioniert. Vielen Dank für deine Hilfe. – kirikoumath

0

Intel Compiler Schiffe compilervars.sh Skript im Verzeichnis bin die, wenn sie wie LD_LIBRARY_PATH, LIBRARY_PATH und PATH mit den richtigen Verzeichnisse, die Host-OpenMP Laufzeitbibliothek und andere Compiler spezifische Bibliotheken wie libsvml die entsprechenden env Variablen gesetzt Quellen (Kurz vector math library) oder libimf (optimierte Version von libm).