链接器找不到 clGetPlatformIDs()?

问题描述 投票:0回答:1

我正在尝试使用 AMD OCL SDK 编译一个简单的 OpenCL 测试程序:

#include <stdio.h>
#include <CL/cl.h>

int main() {
    cl_platform_id platform;
    cl_device_id device;
    cl_uint num_platforms, num_devices;
    cl_int err;

    // Get the number of OpenCL platforms
    err = clGetPlatformIDs(1, &platform, &num_platforms);
    if (err != CL_SUCCESS) {
        fprintf(stderr, "Error getting platform IDs: %d\n", err);
        return 1;
    }

    printf("Number of OpenCL platforms: %u\n", num_platforms);

    // Get the number of devices for the chosen platform
    err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, &num_devices);
    if (err != CL_SUCCESS) {
        fprintf(stderr, "Error getting device IDs: %d\n", err);
        return 1;
    }

    printf("Number of OpenCL devices: %u\n", num_devices);

    printf("OpenCL is working!\n");

    return 0;
}

但是,每当我尝试编译它时:

g++ main.cpp -o main -I./opencl/common/inc -L./opencl/common/lib/x64 -LOpenCL

...我收到错误:

C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\bradl\AppData\Local\Temp\cc04baXU.o:main.cpp:(.text+0x21): undefined reference to `clGetPlatformIDs'

我尝试将 OCL SDK 的位置更改为项目文件夹内,但没有成功。

c++ mingw opencl linker-errors undefined-reference
1个回答
0
投票

您的问题的原因是您实际上并未链接任何库,而是添加了两个库路径。

原因是您只使用了-L(大写),它将目录添加到库搜索路径中。因此

-LOpenCL
也被视为另一个目录。

大小写很重要,要添加库,您应该使用-l(小写)

所以你的 g++ 行应该如下所示:

g++ main.cpp -o main -I./opencl/common/inc -L./opencl/common/lib/x64 -lOpenCL

© www.soinside.com 2019 - 2024. All rights reserved.