我想使用
msdkh264enc
(在 Linux 上),这要求我按照 文档从源代码构建 gstreamer。
我运行以下配置步骤:
meson setup -Dbad=enabled -Dgst-plugins-bad:msdk=enabled -Dgst-plugins-bad:avtp=disabled build
这会启用
msdk
(这就是重点)并禁用 avtp
(因为它无法在我的 Alpine Linux 上构建)。
配置步骤有效并显示所需的输出
Run-time dependency libmfx found: YES 1.28
Has header "mfx/mfxdefs.h" : YES
Has header "mfxvp9.h" : YES
在构建结束时,我安装在
/tmp/blah
中:
meson install --destdir /tmp/blah -C build
我有一个
libgstmsdk.so
,但它的 ldd libgstmsdk.so
输出看起来存在运行时问题:
ldd /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so [0]
/lib/ld-musl-x86_64.so.1 (0x7f33e7666000)
libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x7f33e75a2000)
libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x7f33e7457000)
libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x7f33e7393000)
libgstpbutils-1.0.so.0 => /usr/lib/libgstpbutils-1.0.so.0 (0x7f33e7354000)
libgstcodecparsers-1.0.so.0 => /usr/lib/libgstcodecparsers-1.0.so.0 (0x7f33e72ca000)
libgstva-1.0.so.0 => /usr/lib/libgstva-1.0.so.0 (0x7f33e72b6000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x7f33e716a000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x7f33e710d000)
libmfx.so.1 => /usr/lib/libmfx.so.1 (0x7f33e70fd000)
libva.so.2 => /usr/lib/libva.so.2 (0x7f33e70d3000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x7f33e70bd000)
libgudev-1.0.so.0 => /usr/lib/libgudev-1.0.so.0 (0x7f33e70b2000)
libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f33e7666000)
libintl.so.8 => /usr/lib/libintl.so.8 (0x7f33e70a0000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x7f33e7099000)
liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x7f33e701b000)
libgstaudio-1.0.so.0 => /usr/lib/libgstaudio-1.0.so.0 (0x7f33e6f9c000)
libgsttag-1.0.so.0 => /usr/lib/libgsttag-1.0.so.0 (0x7f33e6f5e000)
libgstallocators-1.0.so.0 => /usr/lib/libgstallocators-1.0.so.0 (0x7f33e6f57000)
libva-drm.so.2 => /usr/lib/libva-drm.so.2 (0x7f33e6f52000)
libpcre2-8.so.0 => /usr/lib/libpcre2-8.so.0 (0x7f33e6eab000)
libffi.so.8 => /usr/lib/libffi.so.8 (0x7f33e6ea1000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f33e6c08000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f33e6be4000)
libudev.so.1 => /lib/libudev.so.1 (0x7f33e6bd4000)
libz.so.1 => /lib/libz.so.1 (0x7f33e6bba000)
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_va_dmabuf_get_modifier_for_format: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_info_dma_drm_to_video_info: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_dma_drm_fourcc_from_string: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_info_dma_drm_new_from_caps: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_dma_drm_fourcc_to_string: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_info_dma_drm_init: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_info_dma_drm_to_caps: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_is_dma_drm_caps: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_va_drm_fourcc_from_video_format: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_video_info_dma_drm_free: symbol not found
Error relocating /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so: gst_va_video_format_from_drm_fourcc: symbol not found
注意例如如何
libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0
,这是系统 libgstreamer,它实际上应该指向 libgstreamer-1.0.so.0 => ./subprojects/gst-plugins-bad/sys/msdk/../../../gstreamer/gst/libgstreamer-1.0.so.0
!
如果我
ldd ./subprojects/gst-plugins-bad/sys/msdk/libgstmsdk.so
(所以库在安装之前),看起来不错。但我需要安装所有这些二进制文件才能使用它们(我无法合理地将 GST_PLUGIN_PATH 指向每个单独的构建目录)!
我在安装步骤中做错了什么?
LD_LIBRARY_PATH
在这里有效:
% LD_LIBRARY_PATH=/tmp/blah/usr/local/lib ldd /tmp/blah/usr/local/lib/gstreamer-1.0/libgstmsdk.so [0]
/lib/ld-musl-x86_64.so.1 (0x7f7117484000)
libgstbase-1.0.so.0 => /tmp/blah/usr/local/lib/libgstbase-1.0.so.0 (0x7f71173be000)
libgstreamer-1.0.so.0 => /tmp/blah/usr/local/lib/libgstreamer-1.0.so.0 (0x7f7117266000)
libgstvideo-1.0.so.0 => /tmp/blah/usr/local/lib/libgstvideo-1.0.so.0 (0x7f711718e000)
libgstpbutils-1.0.so.0 => /tmp/blah/usr/local/lib/libgstpbutils-1.0.so.0 (0x7f711714b000)
libgstcodecparsers-1.0.so.0 => /tmp/blah/usr/local/lib/libgstcodecparsers-1.0.so.0 (0x7f71170b7000)
libgstva-1.0.so.0 => /tmp/blah/usr/local/lib/libgstva-1.0.so.0 (0x7f71170a1000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x7f7116f55000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x7f7116ef8000)
libmfx.so.1 => /usr/lib/libmfx.so.1 (0x7f7116ee8000)
libva.so.2 => /usr/lib/libva.so.2 (0x7f7116ebe000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x7f7116ea8000)
libgudev-1.0.so.0 => /usr/lib/libgudev-1.0.so.0 (0x7f7116e9d000)
libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f7117484000)
libintl.so.8 => /usr/lib/libintl.so.8 (0x7f7116e8b000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x7f7116e84000)
liborc-0.4.so.0 => /tmp/blah/usr/local/lib/liborc-0.4.so.0 (0x7f7116dce000)
libgstaudio-1.0.so.0 => /tmp/blah/usr/local/lib/libgstaudio-1.0.so.0 (0x7f7116d47000)
libgsttag-1.0.so.0 => /tmp/blah/usr/local/lib/libgsttag-1.0.so.0 (0x7f7116d06000)
libgstallocators-1.0.so.0 => /tmp/blah/usr/local/lib/libgstallocators-1.0.so.0 (0x7f7116cfd000)
libva-drm.so.2 => /usr/lib/libva-drm.so.2 (0x7f7116cf8000)
libpcre2-8.so.0 => /usr/lib/libpcre2-8.so.0 (0x7f7116c51000)
libffi.so.8 => /usr/lib/libffi.so.8 (0x7f7116c47000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f71169ae000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f711698a000)
libudev.so.1 => /lib/libudev.so.1 (0x7f711697a000)
libz.so.1 => /lib/libz.so.1 (0x7f7116960000)