Подтвердить что ты не робот

Ошибка включения openmp - "ld: библиотека не найдена для -lgomp" и Clang errors

Я пытаюсь запустить openmp в моей программе на Mavericks, однако, когда я пытаюсь скомпилировать с использованием флага -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.

Любые предложения о том, как исправить мои ошибки Clang и получить openmp для компиляции?

4b9b3361

Ответ 1

Команда gcc в последнем пакете Xcode больше не является интерфейсом GCC для LLVM (на основе самого старого GCC 4.2.1), а скорее символической ссылкой на clang. Clang еще не поддерживает OpenMP. Вы должны установить отдельно другую версию GCC, например. следуя этому руководству или используя любую из доступных систем управления пакетами программного обеспечения, таких как MacPorts и Homebrew.

Ответ 2

Я только недавно напал на эту проблему и написал сценарий процесса получения всего работающего на основе официальных официальных инструкций.

script загрузит все в ~/код для упрощения обслуживания и добавит правильные переменные среды в файл ~/.profile. Для продвинутых пользователей выберите подходящее место, в которое вы хотите установить библиотеку, bin и включить и переместить их вручную. script зависит от знания последней версии среды OpenMP от Intel, которая может быть изменена в верхней части script.

script должен работать из коробки с ванильными мавериками, за исключением одной маленькой проблемы. В среде выполнения OpenML make script он не надежно принимает clang при указании и продолжает с GCC по умолчанию. Таким образом, если у вас нет GCC (который не является обычным явлением из коробки Mavericks), он не сможет построить. Чтобы исправить это, вы должны прокомментировать две строки (как указано в script) на основе сборки libomp_20131209_oss.tgz OpenMP. Новые сборки OpenML могут сломать этот script, поэтому используйте свои собственные угрозы в более новых версиях.

Просто сохраните этот script в файл, запустите 'chmod + x filename.sh' и запустите './filename.sh' из терминала. Для создания LLVM и Clang потребуется некоторое время, поэтому будьте терпеливы.

EDIT: этот script, скорее всего, не сработает на Yosemite, и у меня возникнут проблемы с использованием встроенного clang2 после обновления в dev-сборки 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 clang"

Ответ 3

Если вы используете homebrew, вы можете решить эту проблему, вызвав:

brew install clang-omp

Компилятор будет доступен под clang-omp++ name

Ответ 4

Просто справился с этой проблемой. Здесь ответ плюс, как заставить его работать с Xcode.

  • Возьмите последнюю версию библиотеки времени выполнения OpenMP из https://www.openmprtl.org/download

  • распаковать и скомпилировать его

    mkdir build && cd build && cmake ..
    
  • установите его

    sudo cp ./libiomp5.dylib /usr/lib/
    sudo cp ./omp.h /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/
    
  • Захватите openmp/clang из Git следуя инструкциям http://clang-omp.github.io/

  • скомпилировать openmp/clang

    cd llvm && mkdir build && cd build && ../configure --enable-optimized && make -j
    sudo make install
    
  • обычно он установил clang/clang++ в /usr/local/bin, нам нужно заменить Apple 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 * ../../
    
  • Создайте проект в Xcode, используя код Hello World на веб-сайте clang-openmp для тестирования. После создания добавьте "-fopenmp" в флаги пользовательского компилятора → Другие флаги C в настройках проекта; добавьте /usr/lib/libiomp5.dylib к этапам сборки проекта (параметры проекта → Сборка фаз → Перетащите /usr/lib/libiomp5.dylib в бинарную ссылку с библиотеками)

  • Он должен работать. Yosemite + Xcode 6 протестирован.

Примечание: пользовательский clang не так стабилен, как Apple. Отключитесь, если вы встретите странную ошибку команды после компиляции.