Error al habilitar openmp – “ld: biblioteca no encontrada para -lgomp” y errores de Clang

Estoy intentando hacer que openmp se ejecute en mi progtwig en Mavericks, sin embargo, cuando bash comstackr usando el flag -fopenmp , obtengo el siguiente error:

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

El comando que estoy ejecutando es:

 gcc myProgram.cpp -fopenmp -o myProgram 

Además, cuando ejecuto gcc recibo advertencias de Clang que encuentro muy extrañas. Y al buscar en / usr / bin / gcc, parece que no se vincula a Clang.

¿Alguna sugerencia sobre cómo corregir mis errores Clang y obtener OpenMP para comstackr?

El comando gcc en la última suite de Xcode ya no es el frontend de GCC para LLVM (basado en el antiguo GCC 4.2.1), sino más bien un enlace simbólico para clang . Clang no (todavía) admite OpenMP. Debe instalar por separado otra versión de GCC, por ejemplo, siguiendo este tutorial o utilizando cualquiera de los sistemas de administración de paquetes de software disponibles, como MacPorts y Homebrew .

Acabo de atacar este problema recientemente y he escrito el proceso para que todo funcione según las instrucciones oficiales .

El script descargará todo en ~ / code para facilitar el mantenimiento y agregará las variables de entorno correctas a su archivo ~ / .profile. Para usuarios avanzados, elija una buena ubicación en la que desee que se instalen lib, bin e include y muévalos manualmente. La secuencia de comandos depende de conocer el último tiempo de ejecución OpenMP de Intel, que se puede modificar en la parte superior del script.

La secuencia de comandos debe funcionar de la caja con Mavericks vainilla, a excepción de un pequeño problema. En el script de creación de tiempo de ejecución de OpenML, no acepta confiablemente clang cuando se especifica y continúa con el GCC predeterminado. Como tal, si no tiene instalado GCC (que no es normal en los Mavericks de fábrica), no podrá comstackrse. Para solucionar esto, debe comentar dos líneas (como se indica en el script) basadas en la comstackción libomp_20131209_oss.tgz de OpenMP. Las comstackciones más recientes de OpenML pueden romper esta secuencia de comandos, por lo que puede usar bajo su propio riesgo en versiones más recientes.

Simplemente guarde este script en un archivo, ejecute ‘chmod + x filename.sh’ y ejecute ‘./filename.sh’ desde el terminal. Llevará un tiempo construir LLVM y Clang, así que sea paciente.

EDITAR: Esta secuencia de comandos probablemente fallará en Yosemite y estoy teniendo problemas al usar el clang2 incorporado después de la actualización a las comstackciones de desarrollo de 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 está ejecutando homebrew puede solucionar este problema llamando a:

 brew install clang-omp 

El comstackdor estará disponible bajo el nombre clang-omp++

Solo resolvió este problema. Aquí está la respuesta más cómo hacerlo funcionar con Xcode.

  1. Obtenga la última versión de la biblioteca de tiempo de ejecución de OpenMP desde https://www.openmprtl.org/download

  2. descomprimir y comstackr por

     mkdir build && cd build && cmake .. 
  3. instalarlo por

     sudo cp ./libiomp5.dylib /usr/lib/ sudo cp ./omp.h /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/ 
  4. Grab openmp / clang de Git siguiendo las instrucciones en http://clang-omp.github.io/

  5. comstackr openmp / clang

     cd llvm && mkdir build && cd build && ../configure --enable-optimized && make -j sudo make install 
  6. normalmente instalaría clang / clang ++ en / usr / local / bin, necesitamos reemplazar el clang de Apple con nuestra versión

     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. Cree un proyecto en Xcode, usando el código Hello World en el sitio web clang-openmp para la prueba. Después de creado, agregue “-fopenmp” a Banderas del comstackdor personalizadas -> Otros indicadores C en la configuración del proyecto; agregue /usr/lib/libiomp5.dylib a las fases de comstackción del proyecto (configuración del proyecto -> Fases de comstackción -> Arrastre /usr/lib/libiomp5.dylib al enlace binario con las bibliotecas)

  8. Deberia de funcionar. Yosemite + Xcode 6 está probado.

Nota: el clang personalizado NO es tan estable como el de Apple. Cambie de nuevo si encuentra un extraño error de instrucción después de comstackdo.