这是我试图运行和理解的一段代码。但它在 setDefault 函数中有一个尴尬的错误。
cmake_minimum_required(VERSION 3.19)
project(OpenCL_HPP)
set(CMAKE_CXX_STANDARD 14)
# find OpenCL
find_package(OpenCL REQUIRED)
find_package(Threads REQUIRED)
include_directories(SYSTEM ${OpenCL_INCLUDE_DIRS})
link_directories(${OpenCL_LIBRARIES})
add_executable(OpenCL_HPP main.cpp)
target_link_libraries(${PROJECT_NAME} ${OpenCL_LIBRARIES} Threads::Threads)
代码:
#define CL_HPP_ENABLE_EXCEPTIONS
#define CL_HPP_MINIMUM_OPENCL_VERSION 120
#define CL_HPP_TARGET_OPENCL_VERSION 200
#include <vector>
#include <memory>
#include <algorithm>
#include <iostream>
#ifdef __APPLE__
#include <OpenCL/cl.hpp>
#else
#include <CL/cl2.hpp>
#endif
constexpr int numElements = 32;
int main(void)
{
// Filter for a 2.0 platform and set it as the default
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
cl::Platform plat;
for (auto &p : platforms) {
std::string platver = p.getInfo<CL_PLATFORM_VERSION>();
if (platver.find("OpenCL 2.") != std::string::npos) {
plat = p;
}
}
if (plat() == 0) {
std::cout << "No OpenCL 2.0 platform found.";
return -1;
}
/*
The setDefault chrashes in the call_once function, with error code -1
*/
cl::Platform newP = cl::Platform::setDefault(platforms[0]);
//cl::Platform newP = plat;
if (newP != plat) {
std::cout << "Error setting default platform.";
return -1;
}
return 0;
}
错误:
/home/BLA/CLionProjects/OpenCL_HPP/cmake-build-debug/OpenCL_HPP 在抛出“std::system_error”实例后调用
什么():未知错误-1进程以退出代码 134 结束(被信号 6 中断:SIGABRT)
错误来自 call_once 函数,据我了解,这应该是 pThread 库的一部分,但所有这些都会干扰 stdlib。如我错了请纠正我。
我运行它的机器是 Ubuntu 16.04,Opencl 来自 Intel,我没有安装任何其他 OpenCL 驱动程序(例如用于 GPU)。此代码是 OpenCL-HPP doxygen 中的主要绑定示例。
我想知道,有没有办法纠正这个问题。OpenCL-HPP 是否使用 Pthread 库或 STD 库进行链接?