Linux 编译安装中的 configure 命令

2023-11-19

cover


用了这么久的 Linux 系统,也许你会发现,在编译安装中,有的服务编译安装需要执行 configure 命令,而有的却不需要,这是为什么呢?也是不是像我一样一头雾水呢?其实这取决于服务的构建系统和配置方式,以下是两个常见情况:

  1. 自动配置系统(Autotools)

    许多开源项目使用 Autotools 作为构建系统,它们通常包括 configure.acconfigure.in 文件。在这种情况下,你需要运行 ./configure 命令,它会检查系统环境、配置编译选项,并生成一个 Makefile 文件,用于后续编译和安装步骤。

    然后运行 make 编译源代码,最后运行 make install 安装软件。

  2. CMake 构建

    一些项目使用 CMake 作为构建系统,它们通常包括 CMakeLists.txt 文件。在这种情况下,你不需要运行 ./configure 命令,而是使用 cmake 命令来生成构建文件。

    然后运行 make 编译源代码,最后运行 make install 安装软件。

这里顺便说一下就是,像二进制服务安装其实就是预先进行了编译(configure 或 cmake)且编译生成了二进制文件,其实就是省略了编译安装这一步。因此,我们只需要将二进制文件拷贝至我们操作系统对应的目录下即可(如 /usr/bin/ 或 /usr/local/bin 下)。

再举个例子,我下载了 redis 源码安装包并解压,如下图所示,该源码包中已经有一个 Makefile 文件了,只需要我们 make && make PREFIX=/usr/local install 即可,其实这就是官方已经帮我们 configure 过了,所以说这就是为什么要根据你的操作系统来下载对应的安装包,否则就会安装失败。

image-20230911174121512

在这里说明一下就是:当你使用 ./configure --prefix=/home/data 执行完成后,又 make PREFIX=/usr/local install,那最终的安装路径(即存放二进制、动态库文件等)是以哪个为准呢?如果你在 make install 命令中指定了 PREFIX 参数,它通常会覆盖 configure 中指定的值。所以,为了避免混淆和错误,通常情况下,你应该在 configure 中指定正确的 --prefix,然后直接运行 make install

那如果在执行 ./configuremake install 时都没有指定安装目录,那服务安装完成后,目录又在哪里呢?这种情况下,软件包的安装目录通常会默认为系统的标准安装目录,通常是 /usr/local/usr,具体取决于软件包的默认配置和系统上的默认设置。在大多数情况下,如果没有指定安装目录,软件包将会按照以下约定安装:

  • 可执行文件将被安装到 /usr/local/bin/usr/bin
  • 库文件将被安装到 /usr/local/lib/usr/lib
  • 头文件将被安装到 /usr/local/include/usr/include
  • 配置文件和其他资源文件可能会分散在 /etc/usr/local/etc 或其他位置。

以上就是一些也许可能大概比较简单的常见问题,但还是希望能够帮助正在阅读文章的你!

—END

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 编译安装中的 configure 命令 的相关文章

  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • 如何以管理员身份在 rake 任务中运行 shell 命令?

    我有一个简短的 cmd 文件 我想将其作为部署过程的一部分运行 不幸的是 cmd 文件需要管理员权限 是否可以从 rake 中获得管理员权限 或者我是否需要以管理员身份启动 shell 您可以尝试runas http ss64 com nt
  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win
  • 在 64 位 Windows 上运行 32 位可执行文件时出现问题

    如果允许的话 我会添加 500 个我自己的代表作为赏金 我在用着wkhtml转pdf http wkhtmltopdf org 将 HTML 网页转换为 PDF 这在我的 32 位开发服务器上完美运行 不幸的是 我无法运送我的机器 p 但是
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 如何在拥有句柄时检查给定进程是否正在运行

    我在用ShellExecuteEx启动应用程序 成功开始阅读后TShellExecuteInfo hProcess获取已启动进程的句柄 我想定期检查我的应用程序启动的进程是否仍在运行 两个或多个同名进程可以同时运行 我想确保我的应用程序正在
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • PC 相当于 Coda 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一

随机推荐

  • 在Mac中设置Ctrl+C/V进行复制/粘贴

    从Windows世界走入Mac世界 最让不习惯的是在Mac中 复制 粘贴 的快捷键是Command C V 而且Command键与C V键靠得太近 只能用大拇指与食指进行操作 也让人不习惯 再加上远程桌面连接至Windows时 只能用Ctr
  • Qt中moc问题(qt moc 处理 cpp)

    Qt编译常见的错误 编译报错 1 gt Linking 1 gt cmmwindow obj error LNK2001 unresolved external symbol public virtual struct QMetaObjec
  • 【Flutter 问题系列第 75 篇】Flutter 中 pubspec.yaml 配置文件的说明

    这是 Flutter 问题系列第 75 篇 如果觉得有用的话 欢迎关注专栏 文章目录 一 问题描述 二 属性详解 name description version environment dependencies dev dependenc
  • 向数据库插入数据报错Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xE5\xA4\

    之前连接数据库都没问题 可是今天新加一个表之后 向这个表中加入数据就报错 2018 08 25 14 54 59 082 WARN 8136 nio 8090 exec 7 m m a ExceptionHandlerExceptionRe
  • unity game界面按下play会不断闪烁,按下暂停键(pause)或者中止/下一步(step),game界面的画面会接连变化

    没找到答案 改了两个下午的程序 改完还是这样 后来发现是FixedUpdate Update与OnDrawGizmos的问题 OnDrawGizmos是每帧都会绘制 用FixedUpdate理所当然就那啥了 分析的时候 就突然想到是不是这俩
  • JWT token心得与使用实例

    本文你能学到什么 token的组成 token串的生成流程 token在客户端与服务器端的交互流程 Token的优点和思考 参考代码 核心代码使用参考 不是全部代码 JWT token的组成 头部 Header 格式如下 typ JWT a
  • 剑指offer第二版(C++实现)

    剑指offer 2 面试需要的基础知识 数据结构 数组 二维数组中的查找 字符串 替换空格 链表 从尾到头打印链表 树 重建二叉树 栈和队列 用两个栈实现队列 算法和数据结构 查找和排序 旋转数组的最小数字 递归和循环 斐波那契数列 位运算
  • Go语言实现区块链与加密货币-Part3(交易优化,单机模拟多节点通信)

    交易 二 在这个系列文章的一开始 我们就提到了 区块链是一个分布式数据库 不过在之前的文章中 我们选择性地跳过了 分布式 这个部分 而是将注意力都放到了 数据库 部分 到目前为止 我们几乎已经实现了一个区块链数据库的所有元素 今天 我们将会
  • 轻松解决Visual Studio登陆凭证问题

    很多同学在使用Visual Studio的时候 在试用期过后 需要登陆验证时 往往会登陆不上 出现 无法刷新用户凭证 无法获得信赖 等问题 如图 解决方式 点击账户选项 使用系统Web浏览器
  • 解决:xcode:Member reference base type ‘rapidjson::Document‘ (aka ‘int‘) is not a structure or union

    xcode Member reference base type rapidjson Document aka int is not a structure or union 首先尝试了 把rapidjson当作源码接进项目 放在demo的
  • DB2动态实现时间类型加减

    DB2动态实现时间类型加减 需求分析 根据时间类型动态展示数据 例如作图表展示中x轴时间等 具体实现 db2 sql select t4 SERIES t7 TARGET NAME max t4 DATATIME DATATIME SUBS
  • html结合css实现浏览器展示3D相册

    最近写了一个在浏览器展示3D相册效果 通过html文件结合css实现 1 html详细代码如下
  • Windows10 系统下cuda安装教程,小白教程 !很详细!!

    Windows10 系统下cuda安装教程 1 查看适合自己电脑的cuda版本 1 点击Windows R 输入nvidia smi 看一下自己电脑支持的conda 版本是 根据下图白框标出的地方可以看出我的conda 版本是10 0 2
  • 游戏引擎:打造梦幻游戏世界的秘密武器

    介绍 游戏引擎是游戏开发中不可或缺的工具 它为开发者提供了构建游戏世界所需的各种功能和工具 本文将介绍游戏引擎的概念 使用方法以及一个完整的游戏项目示例 游戏引擎的概念 游戏引擎是一种软件框架 它提供了游戏开发所需的各种功能和工具 包括图形
  • Burp Suite的安装

    首先 想要使用burp suite必须有Java环境 想要检查自己是否有Java环境可以在cmd命令行中输入java java version来查看 java环境可以去oracle官网下载一个jdk1 8 然后双击安装就行 jdk版本不能太
  • 两种方法清空memcache缓存(转)

    默认memcache会监听11221端口 如果想清空服务器上memecache的缓存 大家一般使用的是 telnet localhost 11211flush all 同样也可以使用 echo flush all nc localhost
  • c++——static总结

    前言 经过static修饰的变量 存储在内存的全局静态区 且被static修饰的变量只能在本模块的所有函数引用 内存中的存储区域如下 堆区 是由程序员手动申请 new 与释放 delete 的内存区域 从低地址向高地址申请 内存空间大 存储
  • 用户登录测试用例

    谈起用户登录的测试用例 试问有没有在面试测试职位的时候 经常被面试官问到或者是在笔试题上会让你回答 你当时的回答全面了吗 你对自己的答案给多少分呢 然而这只是面试而已 在工作中你的测试用例写得怎么样 有没有考虑全面呢 前几天网上报了一门课程
  • GBT9706.1中B型BF型和CF型各表示什么意思?多参监护仪设计

    1 GBT9706 1中B型BF型和CF型各表示什么意思 代表的是根据与患者接触的部件的电击防护分类 F代表floating绝缘 有很高的保护要求 低漏电流 B代表身体Body C代表心脏cardiac B类设备 具有特定程度电击防护的设备
  • Linux 编译安装中的 configure 命令

    用了这么久的 Linux 系统 也许你会发现 在编译安装中 有的服务编译安装需要执行 configure 命令 而有的却不需要 这是为什么呢 也是不是像我一样一头雾水呢 其实这取决于服务的构建系统和配置方式 以下是两个常见情况 自动配置系统