J'essaie d'obtenir openmp pour qu'il s'exécute dans mon programme sur Mavericks, cependant quand j'essaye de compiler en utilisant le drapeau -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 j'exécute est:
gcc myProgram.cpp -fopenmp -o myProgram
De plus, lorsque je lance gcc, je reçois des avertissements Clang que je trouve très étranges. Et en regardant dans/usr/bin/gcc, il ne semble pas être lié à Clang.
Des suggestions sur la façon de corriger mes erreurs Clang et de compiler openmp?
La commande gcc
dans la dernière suite Xcode n'est plus l'interface GCC vers LLVM (basée sur le très ancien GCC 4.2.1) mais plutôt un lien symbolique vers clang
. Clang ne prend pas (encore) en charge OpenMP. Vous devez installer séparément une autre version de GCC, par ex. en suivant ce tutoriel ou en utilisant l'un des systèmes de gestion de progiciels disponibles comme MacPorts et Homebrew .
J'ai récemment attaqué ce problème et j'ai écrit le processus pour que tout fonctionne en fonction de instructions officielles .
Le script téléchargera tout dans ~/code pour une maintenance facile et ajoutera les variables d'environnement correctes à votre fichier ~/.profile. Pour les utilisateurs avancés, choisissez un emplacement de Nice dans lequel vous souhaitez installer la bibliothèque, le bac et l'inclusion 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 fonctionner hors de la boîte avec Vanilla Mavericks, à l'exception d'un petit problème. Dans le script make OpenML runtime, il n'accepte pas de manière fiable clang lorsqu'il est spécifié et continue avec le GCC par défaut. En tant que tel, si vous n'avez pas installé GCC (ce qui n'est pas normal sur les Mavericks prêts à l'emploi), il ne parviendra pas à se construire. Pour résoudre ce problème, vous devez mettre en commentaire deux lignes (comme indiqué dans le script) basées sur la version libomp_20131209_oss.tgz d'OpenMP. Les versions plus récentes d'OpenML peuvent briser ce script, alors utilisez-le à vos risques et périls sur les versions plus récentes.
Enregistrez simplement ce script dans un fichier, exécutez 'chmod + x filename.sh' et exécutez './filename.sh' à partir du terminal. Il faudra du temps pour construire LLVM et Clang, alors soyez patient.
EDIT: Ce script échouera très probablement sur Yosemite et j'ai des problèmes avec le clang2 intégré 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"
Si vous exécutez homebrew vous pouvez résoudre ce problème en appelant:
brew install clang-omp
Le compilateur sera disponible sous clang-omp++
Nom
Je viens de résoudre ce problème. Voici la réponse et comment le faire fonctionner avec Xcode.
Récupérez la dernière version de la bibliothèque d'exécution openMP sur https://www.openmprtl.org/download
décompressez et compilez-le par
mkdir build && cd build && cmake ..
installez-le par
Sudo cp ./libiomp5.dylib /usr/lib/
Sudo cp ./omp.h /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/
Récupérez openmp/clang depuis Git en suivant les instructions sur http://clang-omp.github.io/
compiler openmp/clang
cd llvm && mkdir build && cd build && ../configure --enable-optimized && make -j
Sudo make install
normalement, il installerait clang/clang ++ dans/usr/local/bin, nous devons remplacer le Apple clang 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 * ../../
Créez un projet dans Xcode, en utilisant le code Hello World sur le site Web de clang-openmp pour le test. Une fois créé, ajoutez "-fopenmp" aux indicateurs de compilateur personnalisés -> Autres indicateurs C dans les paramètres du projet; ajouter /usr/lib/libiomp5.dylib
aux phases de construction du projet (paramètres du projet -> Phases de construction -> Faites glisser /usr/lib/libiomp5.dylib
dans Link Binary avec les bibliothèques)
Ç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.