查询下已经安装OpenCL的依赖

root@debian:/usr/lib/aarch64-linux-gnu# apt-cache depends ocl-icd-libopencl1:arm64
ocl-icd-libopencl1
  Depends: libc6
  Conflicts: <amd-app>
  Conflicts: <libopencl1>
  Conflicts: <nvidia-libopencl1-dev>
  Suggests: <opencl-icd>
    mesa-opencl-icd
    pocl-opencl-icd
  Replaces: <amd-app>
  Replaces: <libopencl1>
    ocl-icd-libopencl1
  Replaces: <nvidia-libopencl1-dev>
root@debian:/usr/lib/aarch64-linux-gnu# apt-get install opencl-icd
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package opencl-icd is a virtual package provided by:
  pocl-opencl-icd 5.0-4
  mesa-opencl-icd 24.1.0-2
You should explicitly select one to install.

E: Package 'opencl-icd' has no installation candidate
root@debian:/usr/lib/aarch64-linux-gnu# apt-get install opencl-icd
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package opencl-icd is a virtual package provided by:
  pocl-opencl-icd 5.0-4
  mesa-opencl-icd 24.1.0-2
You should explicitly select one to install.

E: Package 'opencl-icd' has no installation candidate

尝试安装mesa-opencl-icd,发现包有冲突

root@debian:/usr/lib/aarch64-linux-gnu# apt-get install mesa-opencl-icd
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 libelf1t64 : Breaks: libelf1 (< 0.191-1)
E: Unable to correct problems, you have held broken packages.

查看安装了哪些文件,并没有安装动态库

root@debian:/usr/lib/aarch64-linux-gnu# dpkg-query -L pocl-opencl-icd
/.
/etc
/etc/OpenCL
/etc/OpenCL/vendors
/etc/OpenCL/vendors/pocl.icd
/usr
/usr/share
/usr/share/doc
/usr/share/doc/pocl-opencl-icd
/usr/share/doc/pocl-opencl-icd/README.md.gz
/usr/share/doc/pocl-opencl-icd/TODO
/usr/share/doc/pocl-opencl-icd/changelog.Debian.gz
/usr/share/doc/pocl-opencl-icd/changelog.gz
/usr/share/doc/pocl-opencl-icd/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/pocl-opencl-icd

查看库文件

root@debian:/usr/lib/aarch64-linux-gnu# ls -l |grep libOpenCL.so.1 
lrwxrwxrwx  1 root root        18 Jan 11  2021 libOpenCL.so.1 -> libOpenCL.so.1.0.0
lrwxrwxrwx  1 root root        16 Jul 19  2022 libOpenCL.so.1.0.0 -> libmali.so.1.0.0

FFmpeg链接问题

Debian GNU/Linux 操作系统

root@debian:/# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

链接FFmpeg动态库

-L/usr/lib/aarch64-linux-gnu/  \
  /usr/lib/aarch64-linux-gnu/libavcodec.so.58 \
  /usr/lib/aarch64-linux-gnu/libavutil.so.56  \
  /usr/lib/aarch64-linux-gnu/libavformat.so.58 \
  /usr/lib/aarch64-linux-gnu/libOpenCL.so.1\

libavutil.so.56依赖libOpenCL.so.1

提示出错

/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clReleaseMemObject@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clReleaseCommandQueue@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clCreateContext@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clGetPlatformInfo@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clEnqueueUnmapMemObject@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clCreateCommandQueue@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clWaitForEvents@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clCreateImage@OPENCL_1.2'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clEnqueueWriteImage@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clReleaseEvent@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clEnqueueMapImage@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clEnqueueReadImage@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clGetContextInfo@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clGetSupportedImageFormats@OPENCL_1.0'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clGetExtensionFunctionAddressForPlatform@OPENCL_1.2'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libavutil.so: undefined reference to `clGetDeviceIDs@OPENCL_1.0'

疑惑

已经链接了libOpenCL.so.1,仍然报错,目前系统默认安装的FFmpeg动态库会出现该问题。其他源码编译版本没有该问题。暂时不清楚clReleaseMemObject定义在哪个动态库

/usr/lib/aarch64-linux-gnu/libmali.so.1.0.0
root@debian:/usr/lib/aarch64-linux-gnu# strings /usr/lib/aarch64-linux-gnu/libmali.so | grep clReleaseMemObject
clReleaseMemObject

发现没有对应的函数符号

参考

Rockchip RK3588 - OpenCL环境搭建 - 大奥特曼打小怪兽 - 博客园 (cnblogs.com)