Fehler beim Aktivieren von openmp – „ld: library not found for -lgomp“ und Clang-Fehler

Lesezeit: 9 Minuten

Ich versuche, openmp in meinem Programm auf Mavericks zum Laufen zu bringen, aber wenn ich versuche, mit dem Flag zu kompilieren -fopenmp Ich bekomme folgenden Fehler:

ld: library not found for -lgomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Der Befehl, den ich ausführe, lautet:

gcc myProgram.cpp -fopenmp -o myProgram

Außerdem erhalte ich beim Ausführen von gcc Clang-Warnungen, die ich sehr seltsam finde. Und ein Blick in /usr/bin/gcc scheint keinen Link zu Clang zu geben.

Irgendwelche Vorschläge, wie ich meine Clang-Fehler beheben und OpenMP zum Kompilieren bringen kann?

  • Sind Sie sicher, dass es so ist? gcc? Könntest du prüfen gcc --version?

    – Kelter

    2. Dezember 2013 um 9:07 Uhr

  • Ja, ich bin mir ziemlich sicher: $gcc –version Konfiguriert mit: — prefix=/Applications/Xcode.app/Contents/Developer/usr –with-gxx- include-dir=/usr/include/c++/4.2 .1 Apple LLVM Version 5.0 (clang-500.2.79) (basierend auf LLVM 3.3svn) Ziel: x86_64-apple-darwin13.0.0 Thread-Modell: posix`

    – Davy Li

    2. Dezember 2013 um 17:05 Uhr


  • Das Versionsformat ähnelt dem, das clang verwendet, und es erwähnt LLVM und clang; vielleicht verhält sich dragonegg so, aber das bezweifle ich (noch nie gesehen – sorry). Leider habe ich keine Erfahrung mit osx, um mehr zu sagen als die einfache Tatsache, dass clang noch nicht mit openmp funktioniert – und seine Beteiligung scheint eine Wurzel Ihres Problems zu sein. Jedenfalls wenn --version sagt nicht, dass es der gcc der FSF ist – dann denke ich, dass es das nicht ist.

    – Kelter

    2. Dezember 2013 um 17:29 Uhr

  • Für Compiler, die OpenMP unterstützen, finden Sie hier das 3-Sekunden-Tutorial: Wie man ein OpenMP-Programm kompiliert und ausführt.

    – jww

    11. Juni 2015 um 21:41 Uhr


Die gcc Der Befehl in der neuesten Xcode-Suite ist nicht mehr das GCC-Frontend zu LLVM (basierend auf dem sehr alten GCC 4.2.1), sondern ein Symlink zu clang. Clang unterstützt OpenMP (noch) nicht. Sie müssen eine andere Version von GCC separat installieren, zB wie folgt dieses Tutorial oder indem Sie eines der verfügbaren Softwarepaketverwaltungssysteme wie verwenden MacPorts und Hausgemacht.

  • Ich habe brew verwendet, um gcc49 zu installieren [brew install gcc49]aber es scheint immer noch so, als ob gcc mit Clang verknüpft ist. $g++ --version Configured with: -- prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn) Target: x86_64-apple-darwin13.0.0 Thread model: posix Muss ich den Symlink für gcc irgendwie manuell einstellen, um gcc 4.9 anstelle von clang zu verwenden?

    – Davy Li

    3. Dezember 2013 um 2:59 Uhr


  • Homebrew installiert Software in /usr/local. Stelle sicher das /usr/local/bin ist in deinem $PATH und dass es vorausgeht /usr/bin. Es ist auch möglich, dass die GCC-Binärdateien, die von Homebrew stammen, mit dem Versionssuffix versehen sind, z gcc-4.9 statt einfach gcc.

    – Christo Iljew

    3. Dezember 2013 um 8:16 Uhr

  • Stimmt es immer noch, dass “Clang OpenMP nicht unterstützt”. Sieh dir das an: clang-omp.github.io Wenn ich das installiere, glauben Sie, dass es Xcode 5 stören wird?

    – RawMean

    2. März 2014 um 7:35 Uhr


  • @RawMean, hattest du Erfolg beim Erstellen und Ausführen von OpenMP/Clang?

    – Christo Iljew

    5. Juni 2014 um 7:34 Uhr

  • Ja, kompiliert und gebaut. Aber ich habe immer noch Probleme, Qt mitzuteilen, wo sich die Bibliotheken befinden

    – RawMean

    5. Juni 2014 um 19:19 Uhr

Fehler beim Aktivieren von openmp – „ld library not found
Jason Parham

Ich habe dieses Problem erst kürzlich angegriffen und den Prozess, alles zum Laufen zu bringen, basierend auf dem Skript erstellt offizielle Anweisungen.

Das Skript lädt zur einfachen Wartung alles in ~/code herunter und hängt die richtigen Umgebungsvariablen an Ihre Datei ~/.profile an. Wählen Sie für fortgeschrittene Benutzer einen schönen Ort aus, an dem die lib, bin und include installiert werden sollen, und verschieben Sie sie manuell. Das Skript hängt davon ab, die neueste OpenMP-Laufzeitumgebung von Intel zu kennen, die oben im Skript geändert werden kann.

Das Skript sollte mit Vanilla Mavericks sofort funktionieren, bis auf ein kleines Problem. Im Make-Skript der OpenML-Laufzeit akzeptiert es Clang nicht zuverlässig, wenn es angegeben ist, und fährt mit dem Standard-GCC fort. Wenn Sie also GCC nicht installiert haben (was bei Out-of-the-Box-Mavericks nicht normal ist), wird es nicht erstellt. Um dies zu beheben, müssen Sie zwei Zeilen auskommentieren (wie im Skript angegeben), basierend auf dem libomp_20131209_oss.tgz-Build von OpenMP. Neuere Builds von OpenML können dieses Skript beschädigen, verwenden Sie es also auf eigene Gefahr für neuere Versionen.

Speichern Sie dieses Skript einfach in einer Datei, führen Sie „chmod +x filename.sh“ aus und führen Sie „./filename.sh“ vom Terminal aus. Es wird eine Weile dauern, LLVM und Clang zu erstellen, seien Sie also geduldig.

BEARBEITEN: Dieses Skript wird höchstwahrscheinlich auf Yosemite fehlschlagen und ich habe Probleme mit dem eingebauten clang2 nach dem Update auf die Entwickler-Builds von OSX 10.10.

INTEL_OPENMP_LATEST_BUILD_LINK=https://www.openmprtl.org/sites/default/files/libomp_20131209_oss.tgz
DEST_FOLDER = ~/code
CLANG_INCLUDE=${DEST_FOLDER}/llvm/include
CLANG_BIN=${DEST_FOLDER}/llvm/build/Debug+Asserts/bin
CLANG_LIB=${DEST_FOLDER}/llvm/build/Debug+Asserts/lib
OPENMP_INCLUDE=${DEST_FOLDER}/libomp_oss/exports/common/include
OPENMP_LIB=${DEST_FOLDER}/libomp_oss/exports/mac_32e/lib.thin

mkdir ${DEST_FOLDER}
cd ${DEST_FOLDER}
git clone https://github.com/clang-omp/llvm
git clone https://github.com/clang-omp/compiler-rt llvm/projects/compiler-rt
git clone -b clang-omp https://github.com/clang-omp/clang llvm/tools/clang
cd llvm
mkdir build
cd build
../configure
make
cd Debug+Asserts/bin
mv clang clang2
rm -rf clang++
ln -s clang2 clang2++
echo "LLVM+Clang+OpenMP Include Path : " ${CLANG_INCLUDE}
echo "LLVM+Clang+OpenMP Bin Path     : " ${CLANG_BIN}
echo "LLVM+Clang+OpenMP Lib Path     : " ${CLANG_LIB}

cd ${DEST_FOLDER}
curl ${INTEL_OPENMP_LATEST_BUILD_LINK} -o libomp_oss_temp.tgz
gunzip -c libomp_oss_temp.tgz | tar xopf -
rm -rf libomp_oss_temp.tgz
cd libomp_oss

echo "You need to do one or two things:"
echo "1.) [Required] Comment out line 433 from libomp_oss/src/makefile.mk"
echo "2.) [Optional] If you do not have GCC installed (not normal on vanilla Mavericks), you must comment out lines 450-451 in libomp_oss/tools/check-tools.pl.  Have you done this or want to compile anyway?"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) make compiler=clang; break;;
        No ) exit;;
    esac
done

echo "OpenMP Runtime Include Path : " ${OPENMP_INCLUDE}
echo "OpenMP Runtime Lib Path     : " ${OPENMP_LIB}

(echo 'export PATH='${CLANG_BIN}':$PATH';
    echo 'export C_INCLUDE_PATH='${CLANG_INCLUDE}':'${OPENMP_INCLUDE}':$C_INCLUDE_PATH'; 
    echo 'export CPLUS_INCLUDE_PATH='${CLANG_INCLUDE}':'${OPENMP_INCLUDE}':$CPLUS_INCLUDE_PATH';
    echo 'export LIBRARY_PATH='${CLANG_LIB}':'${OPENMP_LIB}':$LIBRARY_PATH';
    echo 'export DYLD_LIBRARY_PATH='${CLANG_LIB}':'${OPENMP_LIB}':$DYLD_LIBRARY_PATH}') >> ~/.profile
source ~/.profile

echo "LLVM+Clang+OpenMP is now accessible through [ clang2 ] via terminal and does not conflict with Apple's clang"

  • Hallo, ich habe versucht, dieses Skript zu verwenden, aber ich kann diese Datei nicht finden: ~/code/libomp_oss/exports/mac_32e/lib.thin Ich habe es überprüft, und es fehlt tatsächlich, tatsächlich habe ich das tgz manuell heruntergeladen und das Exportverzeichnis hat viel von Ordnern, aber keine Dateien

    – Kenny D.

    25. April 2014 um 1:28 Uhr


  • Es könnte die libiomp5.dylib in einen anderen Ordner legen. Ich bin mir nicht ganz sicher, warum es all die verschiedenen Ordner in ../exports/ gibt, aber ich würde versuchen, in den anderen Ordnern parallel zu mac_32e nach der Bibliothek zu suchen

    – Jason Parham

    25. April 2014 um 18:45 Uhr

  • Ich erhalte den folgenden Fehler mit dem obigen Skript in osx mavericks.

    – Ramakrishnan Kannan

    5. Mai 2014 um 11:56 Uhr

  • @JasonParham Ich habe die Anweisung befolgt und es geschafft, Clang zu installieren. Aber leider kann ich kein einfaches Hallo Welt kompilieren. Ich habe diesen Fehler: $ clang2++ hello.cpp hello.cpp:1:10: fatal error: ‘iostream’ file not found Können Sie mir sagen, wie ich das beheben kann?

    – Kris

    11. Januar 2015 um 14:03 Uhr

  • @Kris Immer wenn ich meine Projekte mit Clang2 baue, muss ich explizit die stdc++ libs einbinden. Zum Beispiel füge ich in CMake die folgenden Zeilen hinzu: set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -stdlib=libstdc++”) set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -stdlib=libstdc++”) set(CMAKE_SHARED_LINKER_FLAGS “${CMAKE_SHARED_LINKER_FLAGS} -lstdc++ – stdlib=libstdc++”) set(CMAKE_EXE_LINKER_FLAGS “${CMAKE_EXE_LINKER_FLAGS} -lstdc++ -stdlib=libstdc++”)

    – Jason Parham

    15. Januar 2015 um 7:40 Uhr


Wenn Sie laufen selbstgebraut Sie können dieses Problem beheben, indem Sie anrufen:

brew install clang-omp

Der Compiler wird unter verfügbar sein clang-omp++ Name

  • Ich bekomme Error: No available formula with the name "clang-omp"

    – versandschnell

    5. September 2016 um 23:48 Uhr

  • Ich hatte das gleiche Problem und kann clang-omp nicht über Homebrew installieren, aber später fand ich eine Lösung von stackoverflow.com/questions/38971394/…. Es hilft mir, clang-omp erfolgreich zu installieren.

    – Fallstrick

    5. Januar 2017 um 0:24 Uhr

  • Sie müssen llvm für die Verwendung installieren und konfigurieren. clang-omp wurde dort eingebunden. Einzelheiten finden Sie unter stackoverflow.com/a/39843038/1842416.

    – elec3647

    14. April 2017 um 19:56 Uhr

1646040010 725 Fehler beim Aktivieren von openmp – „ld library not found
Raymond

Habe gerade dieses Problem durchgearbeitet. Hier ist die Antwort und wie man es mit Xcode zum Laufen bringt.

  1. Holen Sie sich die neueste Version der openMP-Laufzeitbibliothek von
    https://www.openmprtl.org/download

  2. entpacken und kompilieren Sie es durch

     mkdir build && cd build && cmake .. && make && sudo make install 
    
  3. Installieren Sie es durch

     sudo cp ./libiomp5.dylib /usr/lib/
     sudo cp ./omp.h /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/
    
  4. Holen Sie sich openmp/clang von Git und folgen Sie den Anweisungen auf http://clang-omp.github.io/

  5. openmp/clang kompilieren

     cd llvm && mkdir build && cd build && ../configure --enable-optimized && make -j
     sudo make install
    
  6. normalerweise würde es clang/clang++ in /usr/local/bin installieren, wir müssen das Apple clang durch unsere Version ersetzen

     cd /usr/bin
     sudo mv clang clang-apple
     sudo mv clang++ clang++-apple
     sudo ln -s /usr/local/bin/clang ./clang
     sudo ln -s /usr/local/bin/clang++ ./clang++
     cd /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
     sudo mv clang clang-apple
     sudo mv clang++ clang++-apple
     sudo ln -s /usr/local/bin/clang ./clang
     sudo ln -s /usr/local/bin/clang++ ./clang++
     cd /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
     sudo mv -f * ../../
    
  7. Erstellen Sie ein Projekt in Xcode und verwenden Sie zum Testen den Hello World-Code auf der clang-openmp-Website. Fügen Sie nach der Erstellung “-fopenmp” zu Custom Compiler Flags -> Other C Flags in den Projekteinstellungen hinzu; addieren /usr/lib/libiomp5.dylib zu den Bauphasen des Projekts (Projekteinstellungen -> Bauphasen -> Drag /usr/lib/libiomp5.dylib in Link Binary with Libraries)

  8. Es sollte funktionieren. Yosemite + Xcode 6 wird getestet.

Hinweis: Der benutzerdefinierte Klang ist NICHT so stabil wie der von Apple. Wechseln Sie zurück, wenn Sie nach dem Kompilieren auf einen seltsamen Befehlsfehler stoßen.

886640cookie-checkFehler beim Aktivieren von openmp – „ld: library not found for -lgomp“ und Clang-Fehler

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy