Как скомпилировать с OpenMP в Qt на macOS? - PullRequest
1 голос
/ 27 октября 2019

Я пытаюсь ввести OMP-распараллеливание в мое приложение C ++ Qt, и мне не удается скомпилировать его под macOS. Коллеги используют Windows или Linux, и у них все работает нормально. Что мне нужно написать в .pro-файле Qt и сделать в моей системе?

Ни один из подобных вопросов на этом или любом другом сайте не решил мою проблему. Я обычно компилирую с помощью предоставленного Apple clang, но, похоже, OMP-поддержки для этого нет. Итак, я установил clang с llvm через homebrew, настроил свой комплект в Qt соответственно, а также попробовал каждую перестановку следующих строк в моем .pro-файле:

QMAKE_CXXFLAGS += -fopenmp
QMAKE_LFLAGS += -fopenmp
QMAKE_LINK = /usr/local/Cellar/llvm/9.0.0/bin/clang-9
QMAKE_CC = /usr/local/Cellar/llvm/9.0.0/bin/clang-9
QMAKE_CXX = /usr/local/Cellar/llvm/9.0.0/bin/clang-9
LIBS += -fopenmp
LIBS += -L/usr/local/lib/

При всем этом я получаю много странногопроблемы, приводящие к symbol(s) not found for architecture x86_64, также без каких-либо линий, указывающих на clang-9, но все же это лучшее, чего я мог достичь. Без последней строки я получаю library not found for -lomp, без строки QMAKE_LINK unsupported option '-fopenmp'.

Ни одно из возможных решений, которые я нашел в Интернете для этих сообщений об ошибках, также не помогло. libomp.dylib установлен и связан с /usr/local/lib. Я также попробовал весь процесс с GCC, но безуспешно.

Это беспокоит меня уже три дня, и я очень надеюсь, что это можно решить. Не может быть так сложно, не так ли? Было бы оптимальным решение, которое не мешало бы совместимости с Windows / Linux.

PS: я использую qmake через кнопку воспроизведения в Qt creator.

Ссылка: 1 , 2 , 3 , 4 и многие другие.

1 Ответ

0 голосов
/ 27 октября 2019

AppleClang должен работать просто отлично. Обязательно вызовите препроцессор для обработки OMP через файл .pro.


macx: {
QMAKE_CXXFLAGS += -Xpreprocessor -fopenmp -lomp -I/usr/local/include
}

macx: {
QMAKE_LFLAGS += -lomp
}

macx: {
LIBS += -L /usr/local/lib /usr/local/lib/libomp.dylib
}

...