查询下已经安装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
发现没有对应的函数符号
参考