启用openmp时出错 – “ld:library找不到-lgomp”和Clang错误

我试图让openmp在我的小牛程序中运行,但是当我尝试使用标志-fopenmp进行编译时,出现以下错误:

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

我正在运行的命令是:

 gcc myProgram.cpp -fopenmp -o myProgram 

另外,当我运行gcc时,我得到了Clang警告,我觉得这很警惕。 而看着/ usr / bin / gcc它似乎没有链接到Clang。

任何build议如何解决我的铛错误,并获得openmp编译?

最新的Xcode套件中的gcc命令不再是LLVM的GCC前端(基于非常古老的GCC 4.2.1),而是一个符号链接。 铿锵(还)不支持OpenMP。 您必须单独安装另一版本的GCC,例如按照本教程或使用任何可用的软件包pipe理系统(如MacPorts和Homebrew) 。

我刚刚攻击了这个问题,并根据官方指示编写了一切正常的程序。

脚本会将所有内容下载到〜/代码中以便于维护,并将正确的环境variables添加到〜/ .profile文件中。 对于高级用户,select一个你想要lib,bin和include的好位置,然后手动移动它们。 该脚本依赖于了解来自Intel的最新OpenMP运行时,可以在脚本的顶部进行更改。

除了一个小问题之外,脚本应该和香草小牛一起工作。 在OpenML运行时生成脚本中,它在指定时不能可靠地接受clang,并继续使用默认的GCC。 因此,如果你没有安装GCC(这在开箱即可的情况下是不正常的),它将无法build立。 要解决这个问题,您必须根据OpenMP的libomp_20131209_oss.tgz构build注释掉两行(如脚本中所述)。 较新版本的OpenML可能会破坏这个脚本,所以在新版本上使用它们自己的危险。

只需将此脚本保存到文件中,运行“chmod + x filename.sh”,然后从terminal运行“./filename.sh”。 build立LLVM和Clang需要一段时间,所以要耐心等待。

编辑:这个脚本将很有可能在优胜美地失败,我有问题使用内置的clang2更新到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" 

如果您正在运行自制软件,您可以通过调用以下方法来解决此问题:

 brew install clang-omp 

编译器将在clang-omp++名下提供

刚刚通过这个问题。 这是答案,以及如何使它与Xcode的工作。

  1. https://www.openmprtl.org/download获取最新版本的openMP运行时库;

  2. 解压缩并编译

     mkdir build && cd build && cmake .. 
  3. 安装它

     sudo cp ./libiomp5.dylib /usr/lib/ sudo cp ./omp.h /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/ 
  4. 按照http://clang-omp.github.io/上的说明从Git获取openmp / clang

  5. 编译openmp / clang

     cd llvm && mkdir build && cd build && ../configure --enable-optimized && make -j sudo make install 
  6. 通常它会安装clang / clang ++到/ usr / local / bin,我们需要用我们的版本replace苹果的clang

     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. 在Xcode中创build一个项目,使用clang-openmp网站上的Hello World代码进行testing。 创build后,在项目设置中添加“-fopenmp”到自定义编译器标志 – >其他C标志; 将/usr/lib/libiomp5.dylib添加到项目的构build阶段(项目设置 – >构build阶段 – >将/usr/lib/libiomp5.dylib拖入链接二进制库)

  8. 它应该工作。 优胜美地+ Xcode 6已经过testing。

注意:自定义的clang并不像苹果那样稳定。 如果编译后遇到奇怪的指令错误,则切换回来。