|
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
|
||||||||||||||||||||
Чем и как собирать OpenCL?25.08.2021, 13:29. Показов 4483. Ответов 15
Метки нет (Все метки)
(Копировал с другого форума)
Уже долгое время пытаюсь собрать OpenCL, но ниче не получается. Сначала я скачиваю исходники https://github.com/KhronosGroup/OpenCL-SDK и с помощью CMake (ничего не настраивая) собираю это всё (предварительно установив в нём компилятор, соответствующей версии). Далее я пытаюсь собрать это с помощью mingw (mingw32-make.exe) версий: 8.1.0 (x64, x32), 10.3.0 (x32, x64) При этом я получаю следующие ошибки: Для версии mingw32(и 64) 10.3.0, если собирать в CMake как для mingw32 8.1.0 (см. ниже почему именно так):
Для версии mingw32 (и 64) 8.1.0:
Если я пытаюсь конфигурировать проект с помощью mingw32 версии 10.3.0 из под msys2 с установленными пакетами (для 32): mingw-w64-x86_32-gcc mingw-w64-x86_32-gcc-libs mingw-w64-x86_32-make То CMake ругаца:
Установка пакета mingw-w64-x86_64-gmp ничего не даёт. P.S.: Позже выяснил, что это было из-за того, что я выбирал при настройке в CMake компилятор из под mingw, а нужно было MSYS (я же его msys-ным собираю!). Нужно было быть внимательнее при просмотре. Используя версию mingw 11.2.0 с сайта winlibs.com и флаги OPENCL_ICD_LOADER_DISABLE_OPENCLON12=ON (иначе начинает снова просить windows.management.deployment.h, хотя на компьютере и установлена последняя версия Windows SDK в которой он есть), и BUILD_SHARED_LIBS=OFF, иначе member CMakeFiles\OpenCL.dir/objects.a(OpenCL.rc.obj) in archive is not an object collect2.exe: error: ld returned 1 exit status, я собираю Makefile. После этого сборка библиотеки проходит без ошибок! Но теперь появляется другая проблема: ошибка: windows.management.deployment.h: No such file or directory, хотя опять же этот файл есть в Windows SDK. К проекту библиотеку я подключаю как: add_subdirectory(opencl/source) target_link_libraries(warm_up1 OpenCL) add_subdirectory(opencl/source/external/OpenCL-Headers) И че терь делать с этой windows.management.deployment.h? Если я явно подключаю с помощью include_directories("C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/cppwinrt") include_directories("C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/cppwinrt/winrt") То оно кличет <experimental/coroutine> из файла base.h. Далее я гуглю, и выясняю, что coroutine - штука которая уже с версии mingw 10 лежит вне experimental и может быть подключено как просто <coroutine>. Хорошо, я беру и изменяю SDK-ий файл base.h и меняю
Но тогда о ужас, получается что весь файл base.h в ошибках. При чём некоторые из них выглядят достаточно странно:
Что это за ошибки и самое главное: что с ними делать? Хелп плиз, уже достаточно времени угробил на это.
0
|
||||||||||||||||||||
| 25.08.2021, 13:29 | |
|
Ответы с готовыми решениями:
15
На чем собирать логику? Скорость выполнения на CPU больше чем на OpenCl Как собирать ПК |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||||||||
| 25.08.2021, 13:38 | |||||||||
1
|
|||||||||
|
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
|
|||
| 25.08.2021, 18:29 [ТС] | |||
|
И если Windows SDK не предназначен для mingw, то откуда мне брать windows.management.deployment.h? Зачем оно вообще ему нужно, если я собираю библиотеку компилятором mingw и для mingw?...
0
|
|||
|
Just Do It!
|
||
| 25.08.2021, 19:30 | ||
|
D:/msys64 копипастите туда: pacman -Sy mingw-w64-x86_64-opencv ждёте пока загрузится: Готово. ВСЕ ЗАВИСИМОСТИ БУДУТ ПОСТАВЛЕНЫ АВТОМАТОМ! на скриншоте апдейт, т.е. всё было уже установлено ранее ... если msys'a у вас нету, то брать отсюда: https://www.msys2.org/
1
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||||
| 25.08.2021, 20:49 | |||||
|
Пути в вашей IDE указываете до него, и радуетесь. А то, что вы ставили сами - предназначено только для VS. Добавлено через 4 минуты
1
|
|||||
| 25.08.2021, 21:10 | |
|
0
|
|
| 26.08.2021, 09:07 | |
|
Не по теме: GbaLog-, потому что "внешний" надо настраивать, а у ТС и так проблем хватает :)
0
|
|
|
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
|
||||
| 26.08.2021, 11:31 [ТС] | ||||
|
Хотя с ним всё аналогично. Я устанавливаю следующие пакеты: mingw-w64-i686-gcc mingw-w64-i686-gcc-libs mingw-w64-i686-opencl-headers (собстнна хедеры) mingw-w64-i686-opencl-icd-git (.a файл лежал тут) mingw-w64-i686-cmake (по совету выше) mingw-w64-i686-cmake-doc-qt Скрины настройки QtCreator: При такой настройке при попытке запуска CMake я получаю:
Если в пункте "Генератор CMake" изменить настройку MinGW Makefiles на MSYS Makefiles, то я получаю Error: generator : MSYS Makefiles. Если сменить CMake на MSYS-ный, который я установил из пакетов, то "ошибка: Процесс CMake завершился крахом.". В настройках комплектов говорится ещё, что "CMake версии не поддерживается, обновите до 3.0 или более" (заскринить не могу, окно пропадает).
0
|
||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|
| 26.08.2021, 11:34 | |
|
MiKITA17, давайте так, приложите все точные ссылки на исходники, которые вы пытаетесь собрать. Я сам попробую вечерком.
0
|
|
|
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
|
|||||||
| 26.08.2021, 11:59 [ТС] | |||||||
|
Хорошо, при попытке просто открыть cmake-gui.exe или cmake.exe ИЗ MSYS'а выскакивает ошибка: не найдена та-та-та.dll. Сначала была та же libzstd.dll, установил пакет с ней - mingw-w64-i686-zstd, ошибка исчезла - появилась другая.
Посмотрю, поустанавливаю, мб заработает Добавлено через 24 минуты https://github.com/KhronosGroup/OpenCL-SDK - что собстна собираюсь собирать. CMake версии 3.20.2. Mingw 11.2.0 с вот этого сайта: https://winlibs.com/ для win32 (самое первое). Как я собираю уже рассказывал, пихаю в папку source, устанавливаю папки в CMake, далее конфигурирую, устанавливаю MinGW Makefiles, Specify Native Compilers, там устанавливаю пути к gcc и g++. Далее я убираю флаг BUILD_SHARED_LIBS и устанавливаю флаг OPENCL_ICD_LOADER_DISABLE_OPENCLON12, иначе оно не собирается. Отлично, теперь иду в CMake-файл моего проекта и пишу туда:
0
|
|||||||
|
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
|
|
| 26.08.2021, 12:23 [ТС] | |
|
1
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||
| 27.08.2021, 00:36 | |||
Сообщение было отмечено MiKITA17 как решение
РешениеДобавлено через 7 минут Когда вы собирали, то установили OPENCL_ICD_LOADER_DISABLE_OPENCLON12которая в числе прочего собственно и отрубает требование windows.management.deployment.h (в MinGW его нет!)Если вы хотите компилировать onencl в составе своего проекта, то этот дефайн вы и у себя должны выставить.
1
|
|||
|
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
|
||||||||||||
| 27.08.2021, 11:16 [ТС] | ||||||||||||
|
Хорошо, сейчас попробую прибить уже собранную либу к проекту, мб чё получится... Добавлено через 24 минуты Хорошо, если я подключаю файл .a так:
:-1: ошибка: C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/build/external/OpenCL-ICDLoader/libOpenCL.a(icd_windows_hkr.c.obj):icd_w indows_hk .text+0x4c): undefined reference to `_imp__CM_Open_DevNode_Key@24'Сборка такая же, тока CMake меняль. Что-ж, будем копать дальше... Добавлено через 37 минут ЮХУУУУУУУУУУУУУУУУУУУУУУУУУУ!!!! Заработала следующая комбинация:
Всем спасибо! Но всё таки напоследок: как подключить к проекту просто файл .a, уже собранной библиотеки?
0
|
||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||
| 27.08.2021, 11:23 | |||
|
Это статическая библиотека? Если да, то к ней обычно еще добавляют определенный define который отключит импорт функций из DLL (DLL у нас нет в случае статической сборки). Конкретное название дефайна нужно смотреть в документации или файле readme проекта. Иногда его не пишут вообще нигде, тогда нужно смотреть исходники (заголовочные файлы) с API. Добавлено через 1 минуту libOpenCL - статическая библиотека. Но импорт функций не отключен. Поэтому линкер ищет импортируемые функции, вместо обычных, которые предоставляет libOpenCL.a
1
|
|||
|
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
|
|||||||||||||||||
| 27.08.2021, 18:24 [ТС] | |||||||||||||||||
|
Да и к тому же, ведь когда я пишу так
наверное... Добавлено через 5 часов 48 минут Хорошо, я наконец решил проблему со сборкой и подключением библиотеки. Всем ещё раз спасибо за помощь, напоследок напишу что я сделал чтобы исправить ошибку undefined reference to `_imp__CM_Open_DevNode_Key@24'. Я просто написал
Сначала я конфигурирую и генерирую Makefile с помощью CMake 3.20.2 для mingw с gcc 11.2.0. Затем я собираю это mingw 8.1.0. В Cmake файле проекта пишу:
С компиляторами я так танцую, потому что с версией 11.2.0 поставляется gdb.exe, который у меня просит GetSystemTimePreciseAsFileTime в KERNEL32.dll. А версии 810 всё норм |:D. За то версией 8.1.0 нельзя сконфигурировать и собрать Makefile. Вот так вот. Конечно я понимаю что так дело не делается, но деваться некуда. Пока работает - буду писать так. (Хотя уже собранный пример проработав немного вылетает, но я думаю что это уже беды с кодом, ибо по моему он вообще не для винды писался...)
0
|
|||||||||||||||||
| 27.08.2021, 18:24 | |
|
Помогаю со студенческими работами здесь
16
Как собирать монеты? Как собирать информацию с диска? Как собирать микро нч запросы? Как собирать программу статически? Как установить OpenCL на Win Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|