使用Clang编译LLVM文档中的OpenCL示例时出现链接错误
问题原因与解决方法
直接执行clang test.cl时,Clang会默认将.cl文件当作普通C/C++源文件处理,尝试生成主机端可执行程序,因此链接阶段会寻找main函数入口。但OpenCL内核是运行在OpenCL设备上的专用代码,本身不需要main函数,这就导致了链接错误。
要正确编译OpenCL内核,需要给Clang指定OpenCL相关编译选项,明确告知它要生成设备端代码而非主机可执行程序,常用的两种方式:
仅编译不链接(语法检查):如果只是验证内核代码的语法正确性,只执行编译步骤跳过链接即可:
clang -cl-std=CL3.0 -c test.cl-cl-std=CL3.0指定使用的OpenCL版本,可根据需求调整为CL2.0、CL1.2等;-c表示只编译生成目标文件,不执行链接。生成SPIR-V中间码:SPIR-V是OpenCL官方推荐的设备代码中间表示,后续可通过OpenCL运行时加载到设备执行:
clang -cl-std=CL3.0 -emit-spirv test.cl -o test.spv-emit-spirv指定输出SPIR-V格式的二进制文件,-o test.spv指定输出文件名。
内容的提问来源于stack exchange,提问作者mikulcak
相关产品推荐
相关产品推荐

