构建 Linux 音频应用 101:用户指南,第 2 部分
在本文中,我将完成我们在上一篇文章中开始的流程。请继续阅读,了解激动人心的结局。
构建在本文的第一部分描述的所有准备工作之后,构建过程本身相当平淡。使用 GNU autotools 从源代码构建非常简单
./configure --help ./configure --with-optionYY=yes --with-optionZZ=no make sudo make install
make 命令启动构建过程。它的操作取决于一个非常重要的组件 makefile 中的指令,该文件通常包含各种命令,用于调用所需的依赖项,编译各个目标文件(稍后详细介绍这些文件),将目标文件链接到单个可执行文件(又名二进制文件),并安装已完成的程序。
但是,必须在运行 make 实用程序之前配置源代码。以下命令将显示一些较流行的构建管理器的配置选项
./configure --help (with the autotools system) ./waf configure --help scons -h (local options) scons -H (global options)
在继续 make 阶段之前,请检查可用的配置选项。配置阶段将确定您的环境是否包含用于构建软件的正确工具。它还会让您了解缺失的依赖项、版本不匹配、特殊增强功能以及任何其他会影响构建过程的功能或问题。
关于配置选项的几句话。某些选项可能默认启用,而其他选项必须手动添加到配置阶段。例如,以下选项声明安装的目标目录树,并添加对 LAME MP3 编码器的支持
./configure --prefix=/usr/local --with-lame
当构建过程达到链接阶段时,LAME 库将被添加到库依赖项中。当您运行安装程序时,程序及其所需部件将安装到 /usr/local 目录层次结构中。因此,可执行二进制文件将在 /usr/local/bin/progname 中找到,其头文件将在 /usr/local/include/progname(或可能只是 /usr/local/include)中,其示例和模板将在 /usr/local/share/progname 中,依此类推。
对于 Scons,一旦您确定了所需的选项,只需以这种方式将它们添加到 scons 构建命令中
scons OptionA=1 OptionB=0
其中 1 表示要使用该选项,0 表示不使用。
waf 系统结合了 autotools 过程的各个方面
./waf configure --help ./waf configure --prefix=/usr ./waf build
通常,您可以不带任何选项运行 waf,它将返回可用选项和目标的列表。
假设最佳情况,一旦构建过程开始,它将自动运行,直到完成构建或遇到不可恢复的错误。幸运的是,所有构建系统都会以有助于解决问题的方式报告严重错误。配置阶段可能会遗漏依赖项详细信息,这些详细信息在编译器到达链接阶段(构建过程的最后一步)之前不会出现。您可能会发现某个组件仍然缺失或需要不同的版本,在这种情况下,您需要检索所需部件或自行构建。当您返回到原始过程时,它应该从错误发生的点重新启动构建。
安装和卸载安装您新构建的软件很容易,但它确实需要 root(超级用户)权限。它还需要指定的安装目录。通常,您会将新程序或实用程序安装在 /usr 或 /usr/local 层次结构中。目标目录可以使用 autotools 构建的 --prefix 选项指示,或添加到构建实用程序的配置文件中(例如,scons 的 Sconstruct 文件)。这样的选项允许安装在任何指示的目录中,例如 /opt 或用户的 $HOME 目录。但是,如果您打算从系统内的任何位置运行该程序,则必须通过将其路径添加到 PATH 语句来确保系统可见,例如
export PATH=$PATH:/opt/mysoftware:/home/dave/bin
该命令将两个新路径添加到现有的系统路径 ($PATH)。现在,您可以从系统中的任何其他位置调用这些路径中的程序。
在某些系统上,覆盖发行版已安装的软件版本来安装新版本是相对安全的。但是,必须注意指示正确的安装路径,否则可能会发生双重安装。这种情况不会使您的系统崩溃,但肯定会使其混乱,直到您删除原始文件或重新安装新文件(在从其不正确的目标卸载它们之后)。在升级或降级系统组件(尤其是音频基础设施的组件)之前,您也必须确切知道自己在做什么。应用程序可能依赖于版本,因此请移动而不是销毁原始组件。您可能仍然需要它们来恢复损坏的系统。
注意应用程序的过时配置文件,尤其是在您的 $HOME 目录中。最好删除它们或将它们复制到临时目录,应用程序应该在首次运行后替换它们。
系统软件的最终考虑因素。大多数安装程序会在安装结束时通过调用 ldconfig 来更新系统库缓存,但如果您不确定更新,则可能需要手动运行它。此外,请确保您的安装目标层次结构(使用 --prefix 配置选项设置)包含在 /etc/ld.so.conf 中。如果 /usr/local 层次结构不在系统的库搜索路径中,则在 /usr/local/bin 中安装任何东西都没有多大用处。
好的,您在没有麻烦的情况下构建了程序,您已成功安装它,您已运行它,但它只是不是您想要的。您想要回磁盘空间,所以是时候卸载了,卸载操作可能是一个简单的单行命令,也可能是寻找已安装部件并手动逐个删除的噩梦。大多数构建系统都包含用于卸载程序的机制,例如以下三个流行系统的命令
sudo make uninstall sudo scons -c install sudo ./waf uninstall
您的软件包管理器可用于删除以前由您的发行版安装的组件。但是,重要的是要注意删除是正常删除还是完全删除。完全删除将卸载与软件包关联的所有文件,包括配置文件和首选项文件。当您打算替换系统组件(如 ALSA 或 JACK)时,建议完全删除,但对于用户级应用程序,正常的删除过程应该就足够了。
结尾,第 2 部分我希望您喜欢这次小小的技术之旅,即使您是自己开发应用程序的老手。正如我在本指南的开头所说,这不是火箭科学,任何人都可以学习如何做到。考虑说明,谨慎行事,并相信您的智慧。我不是训练有素的计算机工程师,我没有计算机科学(或任何其他科学)背景,我甚至没有大学学位,但我每天都在 Studio Dave 例行编译、安装和配置我在这里使用的音频软件。我可以为我的硬件获得最佳匹配,并对我的系统中内置了哪些支持感到满意。真的,如果一个自学成才的 59 岁音乐家可以做到,你也可以。