我有一個自訂 FFmpeg 構建,帶有自訂過濾器,是從 FFmpeg 主分支構建的。它在 20.04 中在多台機器上運行良好。但是,當我嘗試在幾週前從 20.04 更新到 22.04 的個人電腦上運行它時,出現以下錯誤:
$ ./ffmpeg
./ffmpeg: error while loading shared libraries: libvpx.so.6: cannot open shared object file: No such file or directory
明顯的原因是需要使用指向新版本庫的新套件中的新標頭重新編譯它。我做到了。然而,無論我重新編譯多少次,它最終總是會尋找相同的舊版本的函式庫。
以下是在我的建置過程中不起作用的庫列表:
$ ldd ./ffmpeg | grep not
libvpx.so.6 => not found
libwebp.so.6 => not found
libcodec2.so.0.9 => not found
libx264.so.155 => not found
libx265.so.179 => not found
它們都安裝了較新的版本:
$ find /usr/ -name "libvpx.so*" -or -name "libwebp.so*" -or -name "libcodec2.so*" -or -name "libx264.so*" -or -name "libx265.so*" 2>/dev/null
/usr/lib/i386-linux-gnu/libwebp.so.7.1.3
/usr/lib/i386-linux-gnu/libwebp.so.7
/usr/lib/x86_64-linux-gnu/libwebp.so.5
/usr/lib/x86_64-linux-gnu/libx264.so.163
/usr/lib/x86_64-linux-gnu/libcodec2.so
/usr/lib/x86_64-linux-gnu/libx265.so.79
/usr/lib/x86_64-linux-gnu/libvpx.so.3.0.0
/usr/lib/x86_64-linux-gnu/libwebp.so.5.0.4
/usr/lib/x86_64-linux-gnu/x264-10bit/libx264.so.148
/usr/lib/x86_64-linux-gnu/libvpx.so.7.0.0
/usr/lib/x86_64-linux-gnu/libwebp.so
/usr/lib/x86_64-linux-gnu/libvpx.so.7.0
/usr/lib/x86_64-linux-gnu/libcodec2.so.1.0
/usr/lib/x86_64-linux-gnu/libvpx.so.3
/usr/lib/x86_64-linux-gnu/libvpx.so.7
/usr/lib/x86_64-linux-gnu/libwebp.so.7.1.3
/usr/lib/x86_64-linux-gnu/libvpx.so
/usr/lib/x86_64-linux-gnu/libwebp.so.7
/usr/lib/x86_64-linux-gnu/libx265.so
/usr/lib/x86_64-linux-gnu/libvpx.so.3.0
/usr/lib/x86_64-linux-gnu/libx265.so.199
/usr/lib/x86_64-linux-gnu/libx264.so
/usr/lib/x86_64-linux-gnu/libx264.so.148
到目前為止,我已經嘗試過:
- 顯然是重新配置、重新編譯。
- 從構建目錄中刪除所有二進位文件,以及查找對 lib 版本的直接硬編碼引用(我沒有找到)。
- 將儲存庫克隆到一個乾淨的目錄上,使用相同的配置標誌,但沒有自訂程式碼。
在所有情況下,建置都是成功的,但二進位檔案引用了那些不存在的程式庫。我的配置標誌全部--enable-libstuff
用於不同的庫,就像設定某些建置時的正常情況一樣,並且沒有明確版本控制。
我沒有看到網上有人遇到這個問題,所以我想可能是一些本地問題。但我不明白它可能是什麼,因為我沒有在任何地方硬編碼這些版本。
所以,我的問題是:什麼可能會影響我在 Ubuntu 22.04 中的構建,最終導致這種行為?
答案1
/usr/local/lib
對於遇到此問題的任何人:這是幾個月前更新之前建立的共享庫。較新的編譯確實構建了一切正常,但我沒有運行sudo make install
以部署較新的共享庫。因此,較新的可執行檔試圖使用較舊的共享庫,而該共享庫確實指向現在不存在的庫。
案件結案。
答案2
升級到 Ubuntu 23.04 後,我遇到了 ffmpeg 問題,並且遇到了 libvpx.so.6 問題。
apt-cache
僅顯示 v7:
$ apt-cache search libvpx
libvpx-dev - VP8 and VP9 video codec (development files)
libvpx-doc - VP8 and VP9 video codec (API documentation)
libvpx7 - VP8 and VP9 video codec (shared library)
為了找到舊的 deb,我只是去 debian 包搜索,例如
https://packages.debian.org/search?keywords=libvpx&searchon=names
這裡顯示了一堆舊東西:
我發現我的大部分依賴項都是 的一部分bullseye
,因此只需單擊 bullseye/stable 鏈接,然後單擊例如 amd64 (或任何您的架構):
然後點擊鏡子,例如http.us.debian.org/debian
下載後,安裝:
sudo dpkg -i ~/Downloads/libvpx6_1.8.2-1build1_amd64.deb
其他我必須做的:
- libdav1d4
- libx264-160
- libx265-192
……最後ffmpeg -codecs
運行了一些輸出。
(哦,然後 Firefox 還可以開始播放 Youtube 上的所有視頻,而不僅僅是一些其中。