C语言 编译 OpenCL HelloWorld 程序:链接器错误



我的参考代码取自Aaftab Munshi的"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会生成一个代码::块文件。当我尝试构建代码::块文件时,出现以下错误:

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 语法的问题。

谢谢!

为了让 cmake 看到 LuminanceHDR/opencl 分支的 mac 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/")

指令安装明确指出,您应该构建整个项目(传递给cmake一个与克隆项目的顶级目录相等的源目录)。

每个示例中包含的CMakeLists.txt不能单独构建。

(看,他们错过了cmake_minimum_required()project()调用,这是每个CMake项目所需要的;调用find_project(OpenCL),这将设置变量OPENCL_LIBRARIES,也会被错过)。

最新更新