gpt4 book ai didi

shared-libraries - 如何将共享库搜索路径添加到可执行文件?

转载 作者:行者123 更新时间:2023-12-04 03:45:09 25 4
gpt4 key购买 nike

我用 librtmp 构建了 ffmpeg。我的 librtmp 位于/opt/librtmp/lib。当我执行 ffmpeg 时,它说:

./ffmpeg: error while loading shared libraries: librtmp.so.0: cannot open shared object file: No such file or directory

我使用 ldd 命令它显示 未找到 :
[qty@testing bin]# ldd ffmpeg 
linux-vdso.so.1 => (0x00007fff15576000)
librtmp.so.0 => not found
libz.so.1 => /lib64/libz.so.1 (0x00002b9a71e10000)
libm.so.6 => /lib64/libm.so.6 (0x00002b9a72025000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b9a722a8000)
libc.so.6 => /lib64/libc.so.6 (0x00002b9a724c3000)
/lib64/ld-linux-x86-64.so.2 (0x00002b9a71bf2000)

我知道我是这样的:
[qty@testing bin]# ls -alh  /opt/librtmp/lib/
total 300K
drwxr-xr-x 3 root root 4.0K Sep 25 17:10 .
drwxr-xr-x 7 root root 4.0K Sep 25 17:10 ..
-rw-r--r-- 1 root root 158K Sep 25 17:10 librtmp.a
lrwxrwxrwx 1 root root 12 Sep 25 17:10 librtmp.so -> librtmp.so.0
-rwxr-xr-x 1 root root 118K Sep 25 17:10 librtmp.so.0
drwxr-xr-x 2 root root 4.0K Sep 25 17:10 pkgconfig

我找到了几种解决问题的方法
  • 修改/etc/ld.so.conf,但是需要 super 用户
  • 设置 LD_LIBRARY_PATH 变量,但用户不方便
  • 将 rpath 传递给 gcc,就像这样

  • 为我的 ffmpeg 配置参数
    PKG_CONFIG_PATH="/opt/librtmp/lib/pkgconfig" ./configure --disable-doc \
    --disable-ffserver --disable-avdevice \
    --disable-postproc --disable-avfilter --disable-bsfs \
    --disable-filters \
    --disable-asm \
    --disable-bzlib \
    --enable-librtmp \
    --prefix=/opt/ffmpeg \
    --extra-ldflags="-Wl,-rpath,/opt/librtmp/lib"

    假设没有源代码重新编译?如何将共享库搜索路径添加到可执行文件?

    最佳答案

    您可以使用 addrpath将 RPATH 添加到您的 elf 文件。

    RPATH 将像 LD_LIBRARY_PATH 一样工作,即告诉动态加载器在该路径中搜索共享库。 RPATH 将永久存在于您的 ELF 文件中。

    关于shared-libraries - 如何将共享库搜索路径添加到可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12580184/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com