#c #cmake #cross-platform #openmp
#c #cmake #кроссплатформенный #openmp
Вопрос:
Я знаю, как использовать cmake для кросс-платформенной связи openmp
find_package(OpenMP REQUIRED)
link_libraries(OpenMP::OpenMP_CXX)
Но я не знаю, как заставить cmake статически связать openmp, фактически, вся официальная переменная cmake о библиотеке openmp является динамической.
В любом случае, не кроссплатформенный способ сделать это:
clang -std=c 2a test.cpp -Iinclude -march=native -O3 -c
clang test.o -o test.x /usr/local/lib/libomp.a -pthread
или если вы используете gcc
g -10 -std=c 2a test.cpp -Iinclude -march=native -O3 -c
g -10 test.o -o test.x /usr/local/opt/gcc/lib/gcc/10/libgomp.a -pthread
Кстати, это дефект cmake или есть какой-либо другой способ его выполнить
Комментарии:
1. Статическое связывание библиотеки OpenMP потенциально является плохой идеей. Если вы сделаете это, а также используете библиотеку, которая сама это делает, вы получите два экземпляра среды выполнения OpenMP, и это может привести к чрезмерной подписке (созданию большего количества потоков, чем у вас есть logicalCPUs) и даже к неправильному выполнению (например, onp single будет защищать код только откод, использующий тот же экземпляр библиотеки). Итак, если вы это сделаете, будьте очень осторожны…
2. @JimCownie Я понимаю вашу идею, ваш комментарий может быть ответом на вопрос, некоторые библиотеки не подходят для статической ссылки, например, OpenMP
Ответ №1:
Не ответ, но слишком много, чтобы вписаться в комментарий.
Я ничего не знаю об OpenMP, кроме того, что cmake поддерживает его: https://cmake.org/cmake/help/latest/module/FindOpenMP.html ?выделить = openmp.
Я не вижу ни одной документации, ссылающейся на static / shared. Возможно, вы правы, и он поддерживает только общие библиотеки.
Дважды проверьте, задав официальный вопрос make: https://discourse.cmake.org /
Вы также можете попробовать прочитать официальный модуль FindOpenMP.cmake, поскольку все это с открытым исходным кодом.
Редактировать:
Если вы правы, в cmake отсутствует эта функциональность, подумайте о том, чтобы внести свой вклад и добавить его 🙂
Комментарии:
1. Да, я пытаюсь отправить сообщение обо всех переменных в ссылке , только чтобы узнать, что все переменные, связанные с библиотекой, относятся к динамической библиотеке, если это так, возможно, мне следует позже сообщить об ошибке в CMake official
2. @Wongboo Вы когда-нибудь выясняли это или публиковали ошибку? Я тоже хочу статическую ссылку OpenMP.
3. @Teharez, я думаю, комментарий Джима верен, я предлагаю вам не статическую ссылку openmp, если вы настаиваете, я пишу способ для macOS, попробуйте использовать его.