Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для MiKITA17
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 (см. ниже почему именно так):

C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\build>D:\msys64\mingw32\bi n\mingw32-make.exe [ 2%] Building C object external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader /icd.c.obj In file included from C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/sour ce/external/OpenCL-Headers/CL/cl_platform.h:244, from C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/sour ce/external/OpenCL-Headers/CL/cl.h:21, from C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\sour ce\external\OpenCL-ICD-Loader\loader\icd.h:36, from C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\sour ce\external\OpenCL-ICD-Loader\loader\icd.c:19: D:/msys64/mingw32/lib/gcc/i686-w64-mingw32/10.3.0/include/stdint.h:9:16: fatal e rror: stdint.h: No such file or directory 9 | # include_next <stdint.h> | ^~~~~~~~~~ compilation terminated. mingw32-make[2]: *** [external\OpenCL-ICD-Loader\CMakeFiles\OpenCL.dir\build.mak e:76: external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader/icd.c.obj] Error 1 mingw32-make[1]: *** [CMakeFiles\Makefile2:295: external/OpenCL-ICD-Loader/CMake Files/OpenCL.dir/all] Error 2 mingw32-make: *** [Makefile:135: all] Error 2
В интернете ничего по поводу этой ошибки я не нашёл.

Для версии mingw32 (и 64) 8.1.0:

C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\build>"D:\mingw64_810\bin
mingw32-make.exe" Consolidate compiler generated dependencies of target OpenCL [ 2%] Building C object external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader /windows/icd_windows_hkr.c.obj C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c: In function 'khrIcdOsVendorsEnumerateH KR': C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c: 217:21: error: 'CM_GETIDLIST_FILTER_CLA SS' undeclared (first use in this function); did you mean 'CM_GETIDLIST_FILTER_B ITS'? 217 | ULONG ulFlags = CM_GETIDLIST_FILTER_CLASS | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | CM_GETIDLIST_FILTER_BITS C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c: 217:21: note: each undeclared identifie r is reported only once for each function it appears in C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c: 218:21: error: 'CM_GETIDLIST_FILTER_PRE SENT' undeclared (first use in this function); did you mean 'CM_GETIDLIST_FILTER _BITS'? 218 | CM_GETIDLIST_FILTER_PRESENT; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | CM_GETIDLIST_FILTER_BITS C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c: 343:22: error: 'DEVPKEY_Device_ClassGui d' undeclared (first use in this function)
343 | &DEVPKEY_Device_ClassGuid, | ^~~~~~~~~~~~~~~~~~~~~~~~ mingw32-make[2]: *** [external\OpenCL-ICD-Loader\CMakeFiles\OpenCL.dir\build.mak e:166: external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader/windows/icd_windo ws_hkr.c.obj] Error 1 mingw32-make[1]: *** [CMakeFiles\Makefile2:295: external/OpenCL-ICD-Loader/CMake Files/OpenCL.dir/all] Error 2 mingw32-make: *** [Makefile:135: all] Error 2
Здесь уже информации побольше. Вот тут https://github.com/KhronosGrou... issues/130 советуют установить более новую версию mingw. Но выше я уже пробовал так делать.

Если я пытаюсь конфигурировать проект с помощью mingw32 версии 10.3.0 из под msys2 с установленными пакетами (для 32):

mingw-w64-x86_32-gcc

mingw-w64-x86_32-gcc-libs

mingw-w64-x86_32-make

То CMake ругаца:

Check for working C compiler: D:/msys64/mingw32/bin/gcc.exe - broken CMake Error at D:/Program Files/CMake 3.20.2/share/cmake-3.20/Modules/CMakeTestCCompiler.cmake:66 (message): The C compiler

"D:/msys64/mingw32/bin/gcc.exe"
is not able to compile a simple test program.

It fails with the following output:

Change Dir: C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/build/CMakeFiles/CMakeTmp

Run Build Command(s):/mingw64/bin/mingw32-make.exe -f Makefile cmTC_64f2b/fast && D:/mingw64/bin/mingw32-make.exe -f
CMakeFiles\cmTC_64f2b.dir\build.make CMakeFiles/cmTC_64f2b.dir/build

mingw32-make.exe[1]: Entering directory 'C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/build/CMakeFiles/CMakeTmp'

Building C object CMakeFiles/cmTC_64f2b.dir/testCCompiler.c.obj

D:\msys64\mingw32\bin\gcc.exe -o CMakeFiles\cmTC_64f2b.dir\testCCompiler. c.obj -c
C:\Users\Public\Documents\Qt_Projects\wa rm-up1\opencl\build\CMakeFiles\CMakeTmp\tes tCCompiler.c

C:\Users\User\AppData\Local\Temp\cc6VTnL T.s: Assembler messages:

C:\Users\User\AppData\Local\Temp\cc6VTnL T.s:9: Error: invalid instruction suffix for `push'

CMakeFiles\cmTC_64f2b.dir\build.make:76: recipe for target 'CMakeFiles/cmTC_64f2b.dir/testCCompiler.c.obj' failed

mingw32-make.exe[1]: *** [CMakeFiles/cmTC_64f2b.dir/testCCompiler.c.obj] Error 1

mingw32-make.exe[1]: Leaving directory 'C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/build/CMakeFiles/CMakeTmp'

Makefile:126: recipe for target 'cmTC_64f2b/fast' failed

mingw32-make.exe: *** [cmTC_64f2b/fast] Error 2
Для x64 дополнительно ещё просит libgmp-10.dll. Очень просит. Диалоговое окно нужно протыкать раз десять, чтобы оно исчезло.

Установка пакета 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 и меняю
C++
1
#include <experimental/coroutine>
на
C++
1
#include <coroutine>
.

Но тогда о ужас, получается что весь файл base.h в ошибках. При чём некоторые из них выглядят достаточно странно:

C:\PROGRA~2\WI3CF2~1\10\Include\100190~1 .0\cppwinrt\winrt\base.h:454: предупреждение: inline variables are only available with '-std=c++17' or '-std=gnu++17'
454 | inline constexpr bool has_category_v = !std::is_same_v<category_t<T>, void>;
| ^~~~~~
Что, мол, подключите C++ версии выше или равной 17. Хотя в CMake я в самом начале пишу:
Code
1
set(CMAKE_CXX_STANDARD 20)
И это работало в других проектах - стандарт 20 был действительно включен в других проектах (получается, и в этом тоже).

Что это за ошибки и самое главное: что с ними делать?
Хелп плиз, уже достаточно времени угробил на это.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.08.2021, 13:29
Ответы с готовыми решениями:

На чем собирать логику?
Добрый день! Хочу попробовать пособирать логические вентили. Не подскажите какие номиналы резисторов, транзисторов ит. д. мне понадобятся?

Скорость выполнения на CPU больше чем на OpenCl
Подскажите кто может. Есть пример программы , где вроде бы скорость выполнения на OpenCl должна быть больше , чем на CPU, но в реальности...

Как собирать ПК
помогите собрать пк

15
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
25.08.2021, 13:38
Цитата Сообщение от MiKITA17 Посмотреть сообщение
из под msys2
Если есть MSYS2, то почему бы сразу не поставить уже собранный и подходящий для тамошнего компилятора OpenCL? Он должен быть в пакетах, насколько я помню.

Цитата Сообщение от MiKITA17 Посмотреть сообщение
set(CMAKE_CXX_STANDARD 20)
Можно попробовать явно указать как
Code
1
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=с++17" )
Добавлено через 4 минуты
Цитата Сообщение от MiKITA17 Посмотреть сообщение
последняя версия Windows SDK
Windows SDK в исходном виде, как он ставится в составе VS, не предназначен для MinGW.
1
 Аватар для MiKITA17
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
25.08.2021, 18:29  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Если есть MSYS2, то почему бы сразу не поставить уже собранный и подходящий для тамошнего компилятора OpenCL? Он должен быть в пакетах, насколько я помню.
Я просто не понимаю как работать с тамошним gcc. Да и всё таки интересно, как собирается эта либа с помощью CMake\mingw и что я не так делаю.

Цитата Сообщение от DrOffset Посмотреть сообщение
Windows SDK в исходном виде, как он ставится в составе VS, не предназначен для MinGW.
Да я вроде отдельно от VS ставил...

И если Windows SDK не предназначен для mingw, то откуда мне брать windows.management.deployment.h? Зачем оно вообще ему нужно, если я собираю библиотеку компилятором mingw и для mingw?...
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
25.08.2021, 19:30
Цитата Сообщение от MiKITA17 Посмотреть сообщение
D:/msys64/mingw32/bin/gcc.exe"
идёте сюда:
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
Цитата Сообщение от MiKITA17 Посмотреть сообщение
Я просто не понимаю как работать с тамошним gcc.
Как с любым другим.
Пути в вашей IDE указываете до него, и радуетесь.

Цитата Сообщение от MiKITA17 Посмотреть сообщение
И если Windows SDK не предназначен для mingw, то откуда мне брать windows.management.deployment.h?
Обычно Win SDK уже идет в комплекте с MinGW, в уже адаптированном виде. Так что надо искать там.

А то, что вы ставили сами - предназначено только для VS.

Цитата Сообщение от MiKITA17 Посмотреть сообщение
Зачем оно вообще ему нужно, если я собираю библиотеку компилятором mingw и для mingw?
Вообще опыт показывает, что оно на самом деле может быть и не нужно. Просто какой-то сценарий конфигурации сборки не сработал, и сборка пошла по неверному пути. Вам стоит знать, что в кроссплатформенном ПО может быть множество сценариев сборки в зависимости от используемого тулчейна и платформы. И вследствие каких-то, возможно не совсем корректных действий, можно получить на определенной платформе кривой вариант сборки, который будет требовать то, что требовать не должен, или, например, соберется, но запускаться и нормально работать не будет.

Добавлено через 4 минуты
Цитата Сообщение от MiKITA17 Посмотреть сообщение
То CMake ругаца:
Да, важный момент. Если вы пользуетесь MSYS2, то и CMake должен быть оттуда.
1
25.08.2021, 21:10

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Да, важный момент. Если вы пользуетесь MSYS2, то и CMake должен быть оттуда.
а почему? у меня в IDE настроен обычный и вроде работает без проблем.

0
26.08.2021, 09:07

Не по теме:

GbaLog-, потому что "внешний" надо настраивать, а у ТС и так проблем хватает :)

0
 Аватар для MiKITA17
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
26.08.2021, 11:31  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
pacman -Sy mingw-w64-x86_64-opencv
OpenCL != OpenCV.

Хотя с ним всё аналогично. Я устанавливаю следующие пакеты:

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 я получаю:

D:\Program Files\CMake 3.20.2\share\cmake-3.20\Modules\CMakeTestCXXCompiler.cmake: 59: ошибка: The C++ compiler "D:/msys64/mingw32/bin/g++.exe" is not able to compile a simple test program. It fails with the following output: Change Dir: C:/Users/Public/Documents/Qt_Projects/build-warm-up1-Desktop_MinGW_32_bit_MSYS2-Debug/CMakeFiles/CMakeTmp Run Build Command(s):/mingw64/bin/mingw32-make.exe -f Makefile cmTC_496db/fast && D:/mingw64/bin/mingw32-make.exe -f CMakeFiles\cmTC_496db.dir\build.make CMakeFiles/cmTC_496db.dir/build mingw32-make.exe[1]: Entering directory 'C:/Users/Public/Documents/Qt_Projects/build-warm-up1-Desktop_MinGW_32_bit_MSYS2-Debug/CMakeFiles/CMakeTmp' Building CXX object CMakeFiles/cmTC_496db.dir/testCXXCompiler.cxx.obj D:\msys64\mingw32\bin\g++.exe -o CMakeFiles\cmTC_496db.dir\testCXXCompile r.cxx.obj -c C:\Users\Public\Documents\Qt_Projects\bu ild-warm-up1-Desktop_MinGW_32_bit_MSYS2-Debug\CMakeFiles\CMakeTmp\testCXXCompile r.cxx CMakeFiles\cmTC_496db.dir\build.make:76: recipe for target 'CMakeFiles/cmTC_496db.dir/testCXXCompiler.cxx.obj' failed mingw32-make.exe[1]: *** [CMakeFiles/cmTC_496db.dir/testCXXCompiler.cxx.obj] Error 1 mingw32-make.exe[1]: Leaving directory 'C:/Users/Public/Documents/Qt_Projects/build-warm-up1-Desktop_MinGW_32_bit_MSYS2-Debug/CMakeFiles/CMakeTmp' Makefile:126: recipe for target 'cmTC_496db/fast' failed mingw32-make.exe: *** [cmTC_496db/fast] Error 2
Далее мои попытки:

Если в пункте "Генератор CMake" изменить настройку MinGW Makefiles на MSYS Makefiles, то я получаю Error: generator : MSYS Makefiles.

Если сменить CMake на MSYS-ный, который я установил из пакетов, то "ошибка: Процесс CMake завершился крахом.". В настройках комплектов говорится ещё, что "CMake версии не поддерживается, обновите до 3.0 или более" (заскринить не могу, окно пропадает).



Цитата Сообщение от DrOffset Посмотреть сообщение
Обычно Win SDK уже идет в комплекте с MinGW, в уже адаптированном виде. Так что надо искать там.
Ничего не найдено. По крайней мере конкретно windows.management.deployment.h.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
26.08.2021, 11:34
MiKITA17, давайте так, приложите все точные ссылки на исходники, которые вы пытаетесь собрать. Я сам попробую вечерком.
0
 Аватар для MiKITA17
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 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
MiKITA17, давайте так, приложите все точные ссылки на исходники, которые вы пытаетесь собрать. Я сам попробую вечерком.
Это если без MSYS'а:

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-файл моего проекта и пишу туда:

Code
1
2
3
add_subdirectory(opencl/source)
add_subdirectory(opencl/source/external/OpenCL-Headers)
target_link_libraries(warm_up1 OpenCL)
И собстна с меня опять требуют этот windows.management.deployment.h!
0
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
26.08.2021, 12:18
Цитата Сообщение от MiKITA17 Посмотреть сообщение
https://github.com/KhronosGroup/OpenCL-SDK - что собстна собираюсь собирать.
ват из ит?
я вижу набор пустых папок!
0
 Аватар для MiKITA17
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
26.08.2021, 12:23  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
я вижу набор пустых папок!
To clone a new repository with all sub-modules included, use the --recursive option. Note that this option clones all sub-modules and their dependencies, which are not required for the OpenCL SDK:

$ git clone --recursive https://github.com/KhronosGroup/OpenCL-SDK.git
Я тоже на этом попался
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
27.08.2021, 00:36
Лучший ответ Сообщение было отмечено MiKITA17 как решение

Решение

Цитата Сообщение от MiKITA17 Посмотреть сообщение
add_subdirectory(opencl/source)
Это в вашем проекте вы пишете? Зачем?

Добавлено через 7 минут
Цитата Сообщение от MiKITA17 Посмотреть сообщение
требуют этот windows.management.deployment.h!
Вы добавили сборку opencl к своему проекту.
Когда вы собирали, то установили
OPENCL_ICD_LOADER_DISABLE_OPENCLON12
которая в числе прочего собственно и отрубает требование windows.management.deployment.h (в MinGW его нет!)
Если вы хотите компилировать onencl в составе своего проекта, то этот дефайн вы и у себя должны выставить.
1
 Аватар для MiKITA17
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
27.08.2021, 11:16  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Это в вашем проекте вы пишете? Зачем?
Ну я так либы подключаю... Хотя да, по моему это всё таки неправильно, т.к. оно пытается собрать либу во время сборки проекта и т.к. я не устанавливаю флаг оно не работает.

Хорошо, сейчас попробую прибить уже собранную либу к проекту, мб чё получится...

Добавлено через 24 минуты
Хорошо, если я подключаю файл .a так:

Code
1
target_link_libraries(warm_up1 ${PROJECT_SOURCE_DIR}/opencl/build/external/OpenCL-ICD-Loader/libOpenCL.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 минут
ЮХУУУУУУУУУУУУУУУУУУУУУУУУУУ!!!!

Заработала следующая комбинация:

Code
1
2
3
4
5
include_directories(opencl/source/external/OpenCL-Headers)
include_directories(opencl/source/external/OpenCL-CLHPP/include)
set(OPENCL_ICD_LOADER_DISABLE_OPENCLON12 ON)
add_subdirectory(opencl/source)
target_link_libraries(warm_up1 OpenCL)
Оно собирается! Правда приложение терь почему-то вылетает, но я думаю это уже проблемы в коде, т.к. некоторые функции всё таки выполняются!

Всем спасибо! Но всё таки напоследок: как подключить к проекту просто файл .a, уже собранной библиотеки?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
27.08.2021, 11:23
Цитата Сообщение от MiKITA17 Посмотреть сообщение
как подключить к проекту просто файл .a, уже собранной библиотеки?
Зависит от того, что это за *.a
Это статическая библиотека?
Если да, то к ней обычно еще добавляют определенный define который отключит импорт функций из DLL (DLL у нас нет в случае статической сборки).
Конкретное название дефайна нужно смотреть в документации или файле readme проекта. Иногда его не пишут вообще нигде, тогда нужно смотреть исходники (заголовочные файлы) с API.

Добавлено через 1 минуту
Цитата Сообщение от MiKITA17 Посмотреть сообщение
undefined reference to `_imp__CM_Open_DevNode_Key@24'
Т.е. вот это как раз похоже на описанный выше случай.
libOpenCL - статическая библиотека.
Но импорт функций не отключен. Поэтому линкер ищет импортируемые функции, вместо обычных, которые предоставляет libOpenCL.a
1
 Аватар для MiKITA17
8 / 8 / 1
Регистрация: 18.11.2019
Сообщений: 109
27.08.2021, 18:24  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Конкретное название дефайна нужно смотреть в документации или файле readme проекта. Иногда его не пишут вообще нигде, тогда нужно смотреть исходники (заголовочные файлы) с API.
Но его нигде нет ._.

Да и к тому же, ведь когда я пишу так
Code
1
2
3
4
set(OPENCL_ICD_LOADER_DISABLE_OPENCLON12 ON)
set(BUILD_SHARED_LIBS OFF)
add_subdirectory(opencl/source)
target_link_libraries(warm_up1 OpenCL)
никакой дефайн не требуется, хотя тут то же самое...
наверное...

Добавлено через 5 часов 48 минут
Хорошо, я наконец решил проблему со сборкой и подключением библиотеки. Всем ещё раз спасибо за помощь, напоследок напишу что я сделал чтобы исправить ошибку undefined reference to `_imp__CM_Open_DevNode_Key@24'.

Я просто написал

Code
1
target_link_libraries(warm_up1 Cfgmgr32.lib)
Так же я немного извратился с компиляторами:

Сначала я конфигурирую и генерирую Makefile с помощью CMake 3.20.2 для mingw с gcc 11.2.0.
Затем я собираю это mingw 8.1.0.
В Cmake файле проекта пишу:

Code
1
2
target_link_libraries(warm_up1 ${PROJECT_SOURCE_DIR}/opencl/build/external/OpenCL-ICD-Loader/libOpenCL.a)
target_link_libraries(warm_up1 Cfgmgr32.lib)
И оно собирается без проблем!

С компиляторами я так танцую, потому что с версией 11.2.0 поставляется gdb.exe, который у меня просит GetSystemTimePreciseAsFileTime в KERNEL32.dll.
А версии 810 всё норм |:D. За то версией 8.1.0 нельзя сконфигурировать и собрать Makefile. Вот так вот. Конечно я понимаю что так дело не делается, но деваться некуда. Пока работает - буду писать так. (Хотя уже собранный пример проработав немного вылетает, но я думаю что это уже беды с кодом, ибо по моему он вообще не для винды писался...)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.08.2021, 18:24
Помогаю со студенческими работами здесь

Как собирать монеты?
Хай! Я делаю мини-игру, суть игры: двигать персонажа и собирать коины. Я застрял на этапе сборки коинов.. Как у меня появляются...

Как собирать информацию с диска?
Делаю свой проводник. Столкнулся с проблемой одной, как собирать информацию с диска. Не знаю как это сделать. Прошу помощи, вся...

Как собирать микро нч запросы?
Здравствуйте, уважаемые seo специалисты. Вот уже второй день читаю ваш форум, понятно и интересно. Раскруткой сайтов я занялась недавно и...

Как собирать программу статически?
Как собирать программу статически? Скиньте ссылку на нормальный мануал.

Как установить OpenCL на Win
Доброго времени суток! Появилась необходимость использовать GPU для ускорения вычислений. Платформа - OS: windows 10, CPU: AMD Ryzen...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru