gpt4 book ai didi

cmake - clFFT编译问题: undefined reference to `clGetPlatformInfo' and other OpenCL functions

转载 作者:行者123 更新时间:2023-12-02 10:46:05 31 4
gpt4 key购买 nike

我尝试构建clFFT库(用于使用OpenCL进行FFT)和clFFT git中包含的示例。

  • 首先,进入/opt/,我做了:
  • git clone https://github.com/clMathLibraries/clFFT.git
  • 之后,总是进入/opt/目录,我做了:$ mkdir build && cd build/
  • 从这里开始,我这样叫cmake:
  • cmake -DOpenCL_INCLUDE_DIR=/opt/AMDAPPSDK-3.0/include -DOpenCL_LIBRARY=/opt/AMDAPPSDK-3.0/lib/x86_64 ../clFFT/src/确实,在 /opt/目录中,我已经从 AMDAPPSDK-3.0文件库中安装了 AMD-APP-SDKInstaller-v3.0.130.136-GA-linux64.tar.bz2
  • 一切似乎对clFFT的编译都是有效的,但失败了:

  • 4.1)首先,在上述 cmake命令的末尾,我得到:
     cmake -DOpenCL_INCLUDE_DIR=/opt/AMDAPPSDK-3.0/include -DOpenCL_LIBRARY=/opt/AMDAPPSDK-3.0/lib/x86_64 ../clFFT/src/
    -- The C compiler identification is GNU 8.3.0
    -- The CXX compiler identification is GNU 8.3.0
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- UNICODE feature disabled on linux
    -- 64bit build - FIND_LIBRARY_USE_LIB64_PATHS TRUE
    -- Could NOT find Boost
    CMake Warning at CMakeLists.txt:146 (message):
    Try setting Boost_DEBUG and Boost_DETAILED_FAILURE_MSG for more information


    -- Looking for CL_VERSION_2_2
    -- Looking for CL_VERSION_2_2 - not found
    -- Looking for CL_VERSION_2_1
    -- Looking for CL_VERSION_2_1 - not found
    -- Looking for CL_VERSION_2_0
    -- Looking for CL_VERSION_2_0 - found
    -- Found OpenCL: /opt/AMDAPPSDK-3.0/lib/x86_64 (found version "2.0")
    -- Found FFTW: /usr/lib/x86_64-linux-gnu/libfftw3f.so;/usr/lib/x86_64-linux-gnu/libfftw3.so
    -- Detected GNU fortran compiler.
    -- CMAKE_CXX_COMPILER flags: -m64 -pthread
    -- CMAKE_CXX_COMPILER debug flags: -g
    -- CMAKE_CXX_COMPILER release flags: -O3 -DNDEBUG
    -- CMAKE_CXX_COMPILER relwithdebinfo flags: -O2 -g -DNDEBUG
    -- CMAKE_EXE_LINKER link flags:
    FFT clients will NOT be built
    GoogleTest unit tests will NOT be built
    FFT callback client will NOT be built
    -- Configuring done
    WARNING: Target "clFFT" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "clFFT" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "StatTimer" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "StatTimer" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "example_examples_fft2d" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "example_examples_fft3d" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "example_examples_fft1d" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    -- Generating done
    -- Build files have been written to: /opt/build
    更准确地说,我是在谈论:
    -- Configuring done
    WARNING: Target "clFFT" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "clFFT" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "StatTimer" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "StatTimer" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "example_examples_fft2d" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "example_examples_fft3d" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    WARNING: Target "example_examples_fft1d" requests linking to directory "/opt/AMDAPPSDK-3.0/lib/x86_64". Targets may link only to libraries. CMake is dropping the item.
    -- Generating done
    -- Build files have been written to: /opt/build
    4.2)将 make启动到 /opt/build/目录后,出现以下警告:
    $ make
    Scanning dependencies of target clFFT
    [ 3%] Building CXX object library/CMakeFiles/clFFT.dir/transform.cpp.o
    In file included from /opt/clFFT/src/library/repo.h:26,
    from /opt/clFFT/src/library/transform.cpp:23:
    /opt/clFFT/src/library/../statTimer/statisticalTimer.GPU.h:132:42: warning: ignoring attributes on template argument âcl_uintâ {aka âunsigned intâ} [-Wignored-attributes]
    typedef std::pair< std::string, cl_uint > idPair;
    ^
    [ 7%] Building CXX object library/CMakeFiles/clFFT.dir/accessors.cpp.o
    In file included from /opt/clFFT/src/library/repo.h:26,
    from /opt/clFFT/src/library/accessors.cpp:23:
    /opt/clFFT/src/library/../statTimer/statisticalTimer.GPU.h:132:42: warning: ignoring attributes on template argument âcl_uintâ {aka âunsigned intâ} [-Wignored-attributes]
    typedef std::pair< std::string, cl_uint > idPair;
    ^
    [ 11%] Building CXX object library/CMakeFiles/clFFT.dir/plan.cpp.o
    In file included from /opt/clFFT/src/library/repo.h:26,
    from /opt/clFFT/src/library/plan.cpp:25:
    /opt/clFFT/src/library/../statTimer/statisticalTimer.GPU.h:132:42: warning: ignoring attributes on template argument âcl_uintâ {aka âunsigned intâ} [-Wignored-attributes]
    typedef std::pair< std::string, cl_uint > idPair;
    ^
    [ 15%] Building CXX object library/CMakeFiles/clFFT.dir/repo.cpp.o
    In file included from /opt/clFFT/src/library/repo.h:26,
    from /opt/clFFT/src/library/repo.cpp:22:

    ...
    最后,我得到以下结束错误:
    [ 80%] Building C object examples/CMakeFiles/example_examples_fft2d.dir/fft2d.c.o
    /opt/clFFT/src/examples/fft2d.c: In function âmainâ:
    /opt/clFFT/src/examples/fft2d.c:63:5: warning: âclCreateCommandQueueâ is deprecated [-Wdeprecated-declarations]
    queue = clCreateCommandQueue( ctx, device, 0, &err );
    ^~~~~
    In file included from /opt/clFFT/src/include/clFFT.h:33,
    from /opt/clFFT/src/examples/fft2d.c:21:
    /opt/AMDAPPSDK-3.0/include/CL/cl.h:1359:1: note: declared here
    clCreateCommandQueue(cl_context /* context */,
    ^~~~~~~~~~~~~~~~~~~~
    [ 84%] Linking C executable examples/fft2d
    /usr/bin/ld: CMakeFiles/example_examples_fft2d.dir/fft2d.c.o: in function `main':
    fft2d.c:(.text.startup+0x76): undefined reference to `clGetPlatformIDs'
    /usr/bin/ld: fft2d.c:(.text.startup+0x9d): undefined reference to `clGetPlatformInfo'
    /usr/bin/ld: fft2d.c:(.text.startup+0xd1): undefined reference to `clGetDeviceIDs'
    /usr/bin/ld: fft2d.c:(.text.startup+0xf6): undefined reference to `clGetDeviceInfo'
    /usr/bin/ld: fft2d.c:(.text.startup+0x13c): undefined reference to `clCreateContext'
    /usr/bin/ld: fft2d.c:(.text.startup+0x152): undefined reference to `clCreateCommandQueue'
    /usr/bin/ld: fft2d.c:(.text.startup+0x215): undefined reference to `clCreateBuffer'
    /usr/bin/ld: fft2d.c:(.text.startup+0x241): undefined reference to `clEnqueueWriteBuffer'
    /usr/bin/ld: fft2d.c:(.text.startup+0x307): undefined reference to `clFinish'
    /usr/bin/ld: fft2d.c:(.text.startup+0x334): undefined reference to `clEnqueueReadBuffer'
    /usr/bin/ld: fft2d.c:(.text.startup+0x3a7): undefined reference to `clReleaseMemObject'
    /usr/bin/ld: fft2d.c:(.text.startup+0x3cc): undefined reference to `clReleaseCommandQueue'
    /usr/bin/ld: fft2d.c:(.text.startup+0x3d5): undefined reference to `clReleaseContext'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clBuildProgram'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clEnqueueNDRangeKernel'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clSetKernelArg'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clGetCommandQueueInfo'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clReleaseEvent'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clGetProgramBuildInfo'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clGetContextInfo'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clCreateProgramWithBinary'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clRetainContext'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clReleaseProgram'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clGetProgramInfo'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clCreateKernel'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clCreateProgramWithSource'
    /usr/bin/ld: ../library/libclFFT.so.2.14.0: undefined reference to `clReleaseKernel'
    collect2: error: ld returned 1 exit status
    make[2]: *** [examples/CMakeFiles/example_examples_fft2d.dir/build.make:85: examples/examples/fft2d] Error 1
    make[1]: *** [CMakeFiles/Makefile2:223: examples/CMakeFiles/example_examples_fft2d.dir/all] Error 2
    make: *** [Makefile:152: all] Error 2
    我不明白这些错误可能来自何处,似乎我建立的 libclFFT.so.2.14.0库不包含对OpenCL基本功能的引用(例如 clGetPlatformIDsclCreateCommandQueue ...)。
    而且,我不知道为什么 undefined reference 的路径是上层的 /usr/bin/ld: ../library/libclFFT.so.2.14.0,因为该库内置在 /opt/build/library目录中。
    我希望能够很好地编译 libclFFT.so,其中考虑了路径 OpenCL_INCLUDE_DIROpenCL_LIBRARY指示的OpenCL header 。
    我必须解决 cmake采取的路径问题(即 ../library/libclFFT.so.2.14.0),并将 AMDAPP SDK中的所有OpenCL函数包含到该库的构建中。

    最佳答案

    您机器上的cmake设置应该具有一个OpenCL查找程序,当find_package(OpenCL)执行cmake发行版中的CMakeLists.txt文件时,该命令由clFFT命令调用(此命令也可以在您自己的CMakeLists.txt文件中使用)。该查找程序只是一个名为FindOpenCL.cmake的文件,该文件必须是cmake配置的一部分。确保您具有以下文件:

    find /usr -name FindOpenCL.cmake

    如果您有此查找程序,则无需在 OpenCL_INCLUDE_DIR调用中设置变量 OpenCL_LIBRARYcmake-查找程序将找到所有所需的OpenCL路径。如果您有这个查找程序,但是它不能正常工作-那么对于它的开发人员来说将是一个问题。如果您没有此查找器,那么在 cmake安装和/或设置中会出现问题。这个发现者描述为 here

    根据我们在评论中的对话,您尝试在MacOS上使用AMD APP SDK v3.0软件包-无法运行,因为AMD仅支持Windows和Linux操作系统。这是可以理解的,因为Apple拥有自己的OpenCL支持悠久的历史-请参阅 here

    关于cmake - clFFT编译问题: undefined reference to `clGetPlatformInfo' and other OpenCL functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56745388/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com