0

一直在尝试编译此示例代码:https ://github.com/boostorg/compute/blob/master/README.md

我使用 mingw530 安装了 QT Creator 5.7

我使用编译了boost库

bootstrap.bat gcc
b2 install --prefix="C:\Boostbuild" --toolset=gcc
bjam --build-dir=c:/Dev/Boost/Boost_lib toolset=gcc stage

我安装了 AMD SDK 3.0、2.9.1 和 2.9

我什至下载了 opencl 1.1、1.2 和 2.1 cl.hpp 并尝试将其包含在内。

编译开始,但我得到了很多错误

C:\Dev\Boost\compute-master\include\boost\compute\device.hpp:80:错误:未定义对 `clRetainDevice@4' 的引用

C:\Users\User\Documents\Projects\build-console-test-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug\main.o:-1:在函数“ZN5boost7compute6deviceaSERKS1_”中:

我尝试了一个简单的 qt 控制台应用程序,使用 boost compute 提供的代码

注意:这不是特定于 qt,我也尝试过使用

g++ -I/path/to/compute/include sort.cpp -lOpenCL

对 main.cpp 中的每个包含执行 -I(见下文)

理想情况下,我想知道如何编译他们页面上给出的示例,包括包含和所有(以及相关的 amd sdk 和/或 opencl 版本)以及必要的包含库。

我的qt项目文件库

INCLUDEPATH += C:\Dev\Boost\compute-master\include
INCLUDEPATH += C:/Users/User/Downloads/dev/boost_1_61_0
INCLUDEPATH += "C:\Program Files (x86)\AMD APP SDK\2.9-1\include"

我的 main.cpp

#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/compute.hpp>
//#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
//#undef CL_VERSION_1_2
//#include <C:\Dev\OpenCL\2.1\cl.hpp>

namespace compute = boost::compute;

int main()
{

    // get the default compute device
    compute::device gpu = compute::system::default_device();

    // create a compute context and command queue
    compute::context ctx(gpu);
    compute::command_queue queue(ctx, gpu);

    // generate random numbers on the host
    std::vector<float> host_vector(1000000);
    std::generate(host_vector.begin(), host_vector.end(), rand);

    // create vector on the device
    compute::vector<float> device_vector(1000000, ctx);

    // copy data to the device
    compute::copy(
        host_vector.begin(), host_vector.end(), device_vector.begin(), queue
    );

    // sort data on the device
    compute::sort(
        device_vector.begin(), device_vector.end(), queue
    );

    // copy data back to the host
    compute::copy(
        device_vector.begin(), device_vector.end(), host_vector.begin(), queue
    );

    return 0;
}

如果我取消注释包含 cl.hpp,我会走得更远

C:/Dev/Boost/compute-master/include/boost/compute/allocator/buffer_allocator.hpp:91: undefined reference to `clReleaseMemObject@4'
4

1 回答 1

2

“大量错误”是链接错误,因为缺少 AMP APP SDK库的位置(在这种情况下)。libOpenCL.a

例如,要链接到 32 位版本MinGw-lOpenCL则变为:
-L"C:\Program Files (x86)\AMD APP SDK\2.9-1\lib\x86" -lOpenCL

或者您可以将以下内容添加到您的 qt.pro文件中:

# Ensure that the AMDAPPSDKROOT environment variable has been set
OPENCL_ROOT = $$(AMDAPPSDKROOT)
isEmpty(OPENCL_ROOT) {
  error("Please set AMDAPPSDKROOT to the location of the AMD APP SDK")
} else {
  message(Using Boost from: $$OPENCL_ROOT)
}

INCLUDEPATH += $$OPENCL_ROOT/include
LIBS += -L$${OPENCL_ROOT}/lib/x86
LIBS += -lOpenCL

注意:AMDAPPSDKROOT环境变量通常是在安装 AMD APP SDK 时创建的。在您的情况下,它应该设置为:

C:\Program Files (x86)\AMD APP SDK\2.9-1\
于 2016-06-27T07:15:43.207 回答