使用clang编译支持C++特性的.cl内核文件报main未定义错误如何解决
错误原因
你当前使用的编译命令默认会执行完整的「编译+链接生成主机端可执行文件」流程,但你的.cl是OpenCL内核代码,本身不需要也没有主机端可执行文件必需的main入口函数,因此链接阶段触发报错。
解决方法
根据你的使用需求选择对应编译参数即可:
- 仅验证代码语法正确性,不需要生成可用的内核产物:添加
-c参数告知clang仅执行编译环节、跳过链接流程,命令如下:
执行后会生成clang -c -cl-std=CLC++ ./test.cltest.o目标文件,无报错即代表你的CLC++语法符合规范。 - 需要编译生成可直接被OpenCL运行时加载的SPIR-V内核产物:额外指定SPIR-V目标架构,命令示例(64位架构适配):
生成的clang -c -cl-std=CLC++ -target spir64-unknown-unknown ./test.cl -o test.spvtest.spv为标准SPIR-V格式二进制内核,可直接传入OpenCL接口加载执行。
注意:如果要运行编译后的CLC内核,需要确保你的显卡/计算设备的OpenCL驱动支持OpenCL C及SPIR-V标准。
内容的提问来源于stack exchange,提问作者Glinttsd
相关产品推荐
相关产品推荐

