使用 msdkh264enc 编译 gstreamer 会导致重定位错误

问题描述 投票:0回答:1

我想使用

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 指向每个单独的构建目录)!

我在安装步骤中做错了什么?

gstreamer gstreamer-1.0
1个回答
0
投票
我认为这与介子如何安装二进制文件无关,而是与运行时的动态链接有关。我不确定是否有更好的解决方案,但设置

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)
    
© www.soinside.com 2019 - 2024. All rights reserved.