Компиляция программы OpenCL HelloWorld: ошибка компоновщика - PullRequest
0 голосов
/ 26 января 2019

Мой справочный код взят из «Руководства по программированию OpenCL» Аафтаба Мунши. Исходные файлы для кода можно найти по адресу https://github.com/bgaster/opencl-book-samples/tree/master/src/Chapter_2/HelloWorld

Я пытаюсь запустить код на macOS Sierra, версия 10.12.6. Следуя инструкциям в книге, я запускаю следующие команды в папке, содержащей исходные файлы, найденные по приведенной выше ссылке GitHub:

mkdir build
cd build
cmake ../ "CodeBlocks - Unix Makefiles"

Вам нужно установить cmake для запуска последней строки. Пример взят из главы 2, стр. 41 текста. Запуск cmake создает файл Code :: Blocks. Когда я пытаюсь построить файл Code :: Blocks, я получаю следующую ошибку:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [HelloWorld] Error 1
make[1]: *** [CMakeFiles/HelloWorld.dir/all] Error 2
make: *** [all] Error 2 

Кто-нибудь знает, почему возникает эта ошибка? Кажется, это проблема процесса сборки, а не синтаксиса C.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Инструкция по установке , в частности, говорится, что вы должны построить весь проект (передать cmake исходный каталог, равный каталог верхнего уровня из клонированный проект).

CMakeLists.txt, содержащиеся в каждом примере, не могут быть построены отдельно .

(Посмотрите, они пропускают вызовы cmake_minimum_required() и project(), необходимые для каждого проекта CMake; вызов find_project(OpenCL), который установил бы переменную OPENCL_LIBRARIES, также пропускается).

0 голосов
/ 26 января 2019

Чтобы cmake увидел материал для Mac OpenCL для ветки LuminanceHDR / opencl, мне пришлось сделать следующее (добавить в CMakeLists.txt):

# find OpenCL on Mac
find_package(OpenCL REQUIRED)
include_directories(SYSTEM ${OpenCL_INCLUDE_DIRS})
SET(LIBS ${LIBS} ${OPENCL_Libraries})
SET(CMAKE_EXE_LINKER_FLAGS "-framework OpenCL -rpath @loader_path/../Frameworks/")
...