13

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 コマンドを使用すると、not foundと表示されます。

[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"

再コンパイルするソース コードがないと仮定しますか? 共有ライブラリの検索パスを実行可能ファイルに追加するにはどうすればよいですか?

4

4 に答える 4

3

ニクソス

これは nixos 固有のものかもしれませんが、ldd/patchelf に関する興味深い洞察を提供します。

https://lastlog.de/blog/posts/playing_FTL_on_NIXOS.html

Ubuntu

ubuntu/fedora では次のように使用LD_LIBRARY_PATHします: スターター スクリプトを使用する場合./ftlは、上記の FTL に関する投稿とその展開方法を参照してください。

于 2016-02-27T15:44:44.657 に答える
3

addrpathを使用して、RPATH を elf ファイルに追加できます。

RPATH は LD_LIBRARY_PATH のように機能します。つまり、ダイナミック ローダーにそのパスで共有ライブラリを検索するように指示します。RPATH は ELF ファイルに永続的に存在します。

于 2012-10-06T00:51:08.840 に答える