提問: 我嘗試著在Linux中編譯視頻編碼器,但是編譯提示出錯:“fatal error: lame/lame.h: No such file or directory”, 我該如何修復這個錯誤?
下面的編譯錯誤說明你的系統沒有安裝LAME庫和它的開發文件。
fatal error: lame/lame.h:No such file or directory
LAME("LAME Ain't an MP3 Encoder")是一個流行的LPGL授權的MP3編碼器。許多視頻編碼工具使用或者支持LAME,如 FFmpeg、 VLC、 Audacity、 K3b、 RipperX等。
要修復這個編譯錯誤,你需要安裝LAME庫和開發文件,按照下面的來。
Debian和它的衍生版在基礎庫中已經提供了LAME庫,因此可以用apt-get直接安裝。
$ sudo apt-get install libmp3lame-dev
在基於Red Hat的版本中,LAME在RPM Fusion的免費倉庫中就有,那麼你需要先設置RPM Fusion (免費)倉庫。
RPM Fusion設置完成後,如下安裝LAME開發包。
$ sudo yum --enablerepo=rpmfusion-free-updates install lame-devel
在2015年1月,RPM Fusion倉庫已經不可以在CentOS/RHEL 7中可用了。因此,這個方法不能用在CentOS/RHEL 7 中。這時你就要從源碼安裝LAME庫了(下面會描述)。
如果你希望用不同的編譯選項安裝自定義的LAME庫,你需要自己編譯。下面是怎樣在基於Debian的系統中編譯和安裝LAME庫(和它的頭文件)。
$ sudo apt-get install gcc git
$ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
$ tar -xzf lame-3.99.5.tar.gz
$ cd lame-3.99.5
$ ./configure --enable-static--enable-shared
$ make
$ sudo make install
注意當你運行上面的配置步驟時,你可以根據你的需求啟用會禁止不同的選項。運行下面的命令查看不同的編譯選項。
$ ./configure --help
共享/靜態的LAME庫默認安裝在 /usr/local/lib。要讓共享庫可以被其他程序使用,完成最後一步:
用編輯器打開 /etc/ld.so.conf,加入下面這行。
/usr/local/lib
接著運行下面的命令,這會將/usr/local/lib中的共享庫添加到動態加載緩存中,因此LAME庫就可以被其他程序調用了。
$ sudo ldconfig
如果你的發行版(比如 CentOS 7)沒有提供預編譯的LAME庫,或者你想要自定義LAME庫,你需要從源碼自己編譯。下面是在基於Red Hat的系統中編譯安裝LAME庫的方法。
$ sudo yum install gcc git
$ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
$ tar -xzf lame-3.99.5.tar.gz
$ cd lame-3.99.5
$ ./configure --enable-static--enable-shared
$ make
$ sudo make install
運行make之前,你可以在configure中帶上合適的選項自定義編譯選項。你可以用下面的命令檢查可用的選項:
$ ./configure --help
最後你需要完成最後一步,因為安裝在/usr/local/lib的LAME共享庫可能在其他程序中不可用。
在/etc/ld.so.conf中添加下面這行:
/usr/local/lib
接著運行下面的命令。這會添加 /usr/local/lib中的共享庫(包括LAME)到動態加載緩存中,讓其他程序可以訪問到。
$ sudo ldconfig