c++ - sierra - update gcc mac



Erreur lors de l'activation de openmp-"bibliothèque ld: introuvable pour-lgomp" et erreurs Clang (3)

Je viens tout juste de m'attaquer à ce problème et j'ai programmé le processus pour que tout fonctionne selon les instructions officielles .

Le script téléchargera tout dans ~ / code pour faciliter la maintenance et ajoutera les variables d'environnement correctes à votre fichier ~ / .profile. Pour les utilisateurs expérimentés, choisissez un emplacement agréable que vous souhaitez installer dans lib, bin et include et déplacez-les manuellement. Le script dépend de la connaissance du dernier runtime OpenMP d’Intel, qui peut être modifié en haut du script.

Le script devrait sortir de la boîte avec les Mavericks à la vanille, sauf un petit problème. Dans le script de création runtime OpenML, il n'accepte pas de manière fiable le clang lorsqu'il est spécifié et continue avec le code GCC par défaut. En tant que tel, si vous n'avez pas installé GCC (ce qui n'est pas normal avec les Mavericks prêts à l'emploi), il ne pourra pas être compilé. Pour résoudre ce problème, vous devez commenter deux lignes (comme indiqué dans le script) basées sur la version libomp_20131209_oss.tgz d'OpenMP. Les nouvelles versions d'OpenML peuvent casser ce script, donc utilisez-le à vos risques et périls sur les nouvelles versions.

Enregistrez simplement ce script dans un fichier, exécutez 'chmod + x filename.sh' et exécutez './filename.sh' depuis le terminal. Il faudra du temps pour construire LLVM et Clang, alors soyez patient.

EDIT: Ce script va probablement échouer sur Yosemite et j'ai des problèmes avec le clang2 après la mise à jour des versions de développement d’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"

https://src-bin.com

J'essaie de lancer openmp dans mon programme sur Mavericks, mais quand j'essaie de compiler en utilisant le flag -fopenmp j'obtiens l'erreur suivante:

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

La commande que je cours est la suivante:

gcc myProgram.cpp -fopenmp -o myProgram

De plus, quand je lance gcc, je reçois des avertissements de Clang que je trouve très étranges. Et regarder dans / usr / bin / gcc ne semble pas être lié à Clang.

Des suggestions sur la façon de corriger mes erreurs de Clang et d'obtenir OpenMP pour compiler?


Answer #1

Juste travaillé à travers ce problème. Voici la réponse et comment le faire fonctionner avec Xcode.

  1. Récupérez la dernière version de la bibliothèque d'exécution openMP depuis https://www.openmprtl.org/download

  2. décompressez et compilez par

    mkdir build && cd build && cmake ..
    
  3. installez-le par

    sudo cp ./libiomp5.dylib /usr/lib/
    sudo cp ./omp.h /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/
    
  4. Prenez openmp / clang de Git en suivant les instructions sur http://clang-omp.github.io/

  5. compiler openmp / clang

    cd llvm && mkdir build && cd build && ../configure --enable-optimized && make -j
    sudo make install
    
  6. normalement il installerait clang / clang ++ dans / usr / local / bin, il faut remplacer le clang Apple par notre version

    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. Créez un projet dans Xcode, en utilisant le code Hello World sur le site Web clang-openmp pour le test. Une fois créé, ajoutez "-fopenmp" aux indicateurs personnalisés du compilateur -> Autres indicateurs C dans les paramètres du projet; ajoutez /usr/lib/libiomp5.dylib aux phases de construction du projet (paramètres du projet -> Phases de construction -> Faites glisser /usr/lib/libiomp5.dylib dans le lien binaire avec les bibliothèques)

  8. Ça devrait marcher. Yosemite + Xcode 6 est testé.

Remarque: le clang personnalisé n'est pas aussi stable que celui d'Apple. Revenez en arrière si vous rencontrez une erreur d'instruction étrange après la compilation.


Answer #2

Si vous utilisez Homebrew vous pouvez résoudre ce problème en appelant:

brew install clang-omp

Le compilateur sera disponible sous le nom clang-omp++





osx-mavericks