I would like to use msdkh264enc
(on Linux) which requires that I build gstreamer from sources, as per the docs.
I run the following configure step:
meson setup -Dbad=enabled -Dgst-plugins-bad:msdk=enabled -Dgst-plugins-bad:avtp=disabled build
Which enables msdk
(that's the point here) and disables avtp
(because it fails to build on my Alpine Linux).
The configure step works and shows the required output
Run-time dependency libmfx found: YES 1.28
Has header "mfx/mfxdefs.h" : YES
Has header "mfxvp9.h" : YES
At the end of the build I install in /tmp/blah
with:
meson install --destdir /tmp/blah -C build
I have a libgstmsdk.so
, but its ldd libgstmsdk.so
output looks like there are runtime issues:
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
Note how e.g. libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0
, which is the system libgstreamer, where it should actually be pointing to libgstreamer-1.0.so.0 => ./subprojects/gst-plugins-bad/sys/msdk/../../../gstreamer/gst/libgstreamer-1.0.so.0
!
If I ldd ./subprojects/gst-plugins-bad/sys/msdk/libgstmsdk.so
(so the library before it gets installed), it seems fine. But I need to install all those binaries in order to use them (I can't reasonably point GST_PLUGIN_PATH to each separate build directory)!
What am I doing wrong in the installation step?
I think it is not about how meson installs the binaries, but rather it has to do with the dynamic linking at runtime. I am no sure if there is a better solution, but setting the LD_LIBRARY_PATH
works here:
% 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)