如何在 Linux 上修复“致命错误:lame/lame.h:没有这样的文件或目录”
问题:我试图在Linux上编译视频编码器软件,但编译失败,并显示一条消息“致命错误:lame/lame.h:没有这样的文件或目录”。我该如何修复这个错误?
以下编译错误表明您的Linux系统没有安装LAME库及其开发文件。
fatal error: lame/lame.h: No such file or directory
LAME(“LAME Ain't an MP3 Encoder”的缩写)是一种流行的 MP3 编码编解码器,已获得 LGPL 许可。许多视频编码/翻录工具使用或支持 LAME。其中包括 FFmpeg、VLC、Audacity、K3b、RipperX 等等。
要修复编译错误,您需要安装LAME库及其开发文件,如下所示。
在 Debian、Ubuntu 或 Linux Mint 上安装 LAME 库及其开发文件
Debian 及其衍生系统在其基础存储库中提供 LAME 库,因此可以轻松使用 apt-get 安装 LAME。
$ sudo apt-get install libmp3lame-dev
在 Fedora、CentOS 或 RHEL 上安装 LAME 库及其开发文件
在基于 Red Hat 的发行版上,LAME 编码器库可通过 RPM Fusion 的免费存储库获得。因此,在继续之前,您首先需要设置 RPM Fusion(免费)存储库。
设置 RPM Fusion 后,按如下方式安装 LAME 开发文件。
$ sudo yum --enablerepo=rpmfusion-free-updates install lame-devel
截至 2015 年 2 月,RPM Fusion 存储库尚不可用于 CentOS 或 RHEL 7。因此,此方法不适用于 CentOS/RHEL 7。在这种情况下,您可以通过从源构建来安装 LAME 库(如下所述)。
在 Debian、Ubuntu 或 Linux Mint 上从源代码编译 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
时,您可以根据需要启用或禁用各种选项。运行以下命令以查看所有可用的编译选项。
$ ./configure --help
共享/静态 LAME 库默认安装在 /usr/local/lib
中。要使其他应用程序可以访问共享库,请完成最后一步:
使用您喜欢的文本编辑器打开 /etc/ld.so.conf
,并附加以下行。
/usr/local/lib
然后运行下面的命令。这会将 /usr/local/lib 中的共享库添加到动态加载器缓存中,从而使其他应用程序可以访问共享 LAME 库。
$ sudo ldconfig
在 Fedora 或 CentOS/RHEL 上从源代码编译 LAME 库
如果您的发行版(例如 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
