Linux ./configure --prefix命令

414 篇文章 ¥19.90 ¥99.00
本文介绍了Linux中配置脚本./configure的--prefix选项,详细解释了如何使用该选项来定制软件安装路径,强调在实际工作中的便利性和常见应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install),具体的安装方法一般作者都会给出文档,这里主要讨论配置(configure)。Configure是一个可执行脚本,它有很多选项,使用命令./configure –help输出详细的选项列表,如下:
-bash-3.00# ./configure --help
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE     cache test results in FILE
--help             print this message
--no-create         do not create output files
--quiet, --silent     do not print `checking...' messages
--version           print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX       install architecture-independent files in PREFIX
                [/usr/local]
--exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                [same as prefix]
--bindir=DIR         user executables in DIR [EPREFIX/bin]
……….(省略若干)
很多的选项,个人认为,你可以忽略其他的一切,但请把—prefix加上。这里以安装supersparrow-0.0.0为例,我们打算把它安装到目录 /usr/local/supersparrow,于是在supersparrow-0.0.0目录执行带选项的脚本./configure --prefix=/usr/local/supersparrow,执行成功后再编译、安装(make,make install);安装完成将自动生成目录supersparrow,而且该软件所有的文件都被复制到这个目录。为什么要指定这个安装目录?是为了以后的维护方便,如果没有用这个选项,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄清楚到底复制了那些文件、都复制到哪里去了—基本上是一塌糊涂。

用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。

一个小选项有这么方便的作用,建议在实际工作中多多使用


http://blog.youkuaiyun.com/xiyangfan/article/details/5321790

<think>我们正在讨论如何在使用`./configure`脚本配置软件编译时指定使用特定的库(libs)。根据用户提供的引用,特别是引用[1]提到了使用`./Configure`(这里可能是特指Apache的配置工具,但原理类似)来避免重复配置,而引用[2]则提到了在编译内核时使用配置工具(如`make menuconfig`)生成配置文件。不过,用户的问题核心在于如何通过`./configure`指定库。 在开源软件的编译中,`./configure`脚本通常用于检测系统环境并生成Makefile。指定特定库的常用方法是通过以下两种方式之一: 1. 使用`--with-<libraryname>=<path>`选项:指定库的安装路径前缀(prefix),即库的头文件在`<path>/include`,库文件在`<path>/lib`。 2. 使用`--with-<libraryname>-include=<path>`和`--with-<libraryname>-lib=<path>`:分别指定头文件和库文件的路径(较少见,但某些软件支持)。 3. 使用环境变量:如`CFLAGS`指定额外的头文件路径,`LDFLAGS`指定额外的库文件路径。 更常见的是,如果库的名称不是标准的,或者需要指定多个库,我们可能会使用环境变量。但大多数情况下,`--with`或`--without`选项是首选。 下面以指定OpenSSL和zlib库为例,说明如何配置: 假设我们有两个库的安装路径- OpenSSL安装在`/opt/openssl` - zlib安装在`/usr/local/zlib` 那么在配置时,我们可以这样写: ```bash ./configure \ --with-openssl=/opt/openssl \ --with-zlib=/usr/local/zlib ``` 如果软件支持,也可以分别指定头文件和库文件路径(例如,当库的头文件和库文件不在同一目录下时): ```bash ./configure \ --with-openssl-include=/opt/openssl/include \ --with-openssl-lib=/opt/openssl/lib \ --with-zlib-include=/usr/local/zlib/include \ --with-zlib-lib=/usr/local/zlib/lib ``` 但是,请注意,不同的软件包可能支持不同的选项。因此,最好查看软件包自带的配置帮助(通过`./configure --help`)来获取具体信息。 另外,如果库的安装路径不在标准位置(如`/usr`或`/usr/local`),我们可能需要通过环境变量`CFLAGS`和`LDFLAGS`来指定搜索路径: ```bash export CFLAGS="-I/opt/openssl/include -I/usr/local/zlib/include" export LDFLAGS="-L/opt/openssl/lib -L/usr/local/zlib/lib" ./configure ``` 这样,编译器在查找头文件时会搜索`/opt/openssl/include`和`/usr/local/zlib/include`,链接器在查找库文件时会搜索`/opt/openssl/lib`和`/usr/local/zlib/lib`。 需要注意的是,如果库文件路径不在动态链接器的默认搜索路径中,在运行程序时可能会遇到找不到库的问题。此时,可以在编译时通过`-Wl,-rpath`选项将库路径嵌入到可执行文件中,或者在运行时设置`LD_LIBRARY_PATH`环境变量。 总结: - 优先查看`./configure --help`以了解软件支持的选项。 - 使用`--with-<libname>=<path>`指定库的安装路径前缀。 - 当软件不支持详细的`--with`选项时,使用环境变量`CFLAGS`和`LDFLAGS`指定头文件和库文件的路径。 根据引用[1]中提到的避免重复操作,我们可以将配置命令写成一个脚本,以便重复使用。 下面,我们将以编译OpenSSH时需要指定zlib和OpenSSL为例,展示具体的配置命令(参考用户上一次的问题): ```bash ./configure \ --prefix=/usr/local \ --sysconfdir=/usr/local/etc \ --with-zlib=/usr/local/zlib \ --with-ssl-dir=/opt/openssl ``` 这里,`--with-ssl-dir`是OpenSSH中用于指定OpenSSL安装路径的选项,而`--with-zlib`用于指定zlib的安装路径。注意,不同软件中选项名称可能略有不同。 如果配置过程中遇到库找不到的问题,可以检查配置日志(config.log)以获取详细信息。 最后,生成相关问题: 1. 如何解决`./configure`过程中出现的库未找到错误? 2. 如何设置环境变量`CFLAGS`和`LDFLAGS`? 3. 如何将自定义库路径添加到系统的默认搜索路径? 4. 在交叉编译时如何指定目标平台的库? 5. 如何查看一个软件包的`./configure`支持哪些选项?</think>在使用 `./configure` 配置软件编译时,指定使用特定库的方法主要分为以下三种方式,这些方法可确保编译器正确链接所需的库文件: ### 一、基础指定方法(推荐) 通过 `--with-<库名>` 选项指定库的安装路径前缀: ```bash ./configure \ --with-openssl=/usr/local/openssl \ # OpenSSL库路径 --with-zlib=/opt/zlib # zlib库路径 ``` - **路径要求**:该路径下应包含 `include/`(头文件)和 `lib/`(库文件)目录 - **自动检测**:配置脚本会自动检测 `include/` 中的头文件和 `lib/` 中的 `.so/.a` 文件[^1] ### 二、高级指定方法(精确控制) 当库文件不在标准位置时,可分别指定头文件和库文件路径: ```bash ./configure \ CPPFLAGS="-I/opt/custom/include" \ # 自定义头文件路径 LDFLAGS="-L/opt/custom/lib" \ # 自定义库文件路径 LIBS="-lcrypto -lz" # 显式链接crypto和zlib ``` ### 三、环境变量法(临时配置) 通过导出环境变量指定路径: ```bash export C_INCLUDE_PATH=/opt/custom/include:$C_INCLUDE_PATH export LIBRARY_PATH=/opt/custom/lib:$LIBRARY_PATH ./configure # 无需额外参数 ``` ### 验证配置结果 1. **检查缓存**:查看 `config.log` 文件确认库是否被检测到 2. **测试包含**:在代码中添加测试语句: ```c #include <openssl/ssl.h> // 检查OpenSSL头文件 #pragma comment(lib, "zlib") // Windows下检查库链接 ``` ### 常见问题解决 1. **库未找到错误**: ```bash checking for zlib... no configure: error: zlib development files not found ``` **解决方案**: ```bash ./configure --with-zlib=/usr/local/zlib # 显式指定路径 ``` 2. **版本不兼容**: 使用 `pkg-config` 确保版本匹配: ```bash ./configure OPENSSL_CFLAGS=$(pkg-config --cflags openssl) \ OPENSSL_LIBS=$(pkg-config --libs openssl) ``` 3. **交叉编译指定**(ARM示例): ```bash ./configure --host=arm-linux-gnueabihf \ --with-sysroot=/mnt/arm-sysroot \ --with-openssl=/mnt/arm-sysroot/usr ``` > **提示**:使用 `./configure --help | grep "库名"` 查看软件支持的特定选项[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值