【关于源码安装部署的三个步骤解析:预编译(./XXX),编译(make),安装(make install)】

文章详细阐述了源码安装的三个关键步骤:预编译(如运行./configure)用于检测系统依赖和创建Makefile,编译(make)根据Makefile将源码转化为二进制文件,以及安装(makeinstall)将编译后的文件部署到指定目录。以Nginx源码安装为例,解释了配置参数的作用和安装过程。

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

关于源码安装部署的三个步骤解析:预编译(./XXX),编译(make),安装(make install)

前言
相信很多Linux小白对于源码安装的步骤都十分熟练了,但是知其然是否也知其所以然呢?那今天就由我庖丁解牛-源码安装的三个步骤:预编译(./XXX),编译(make),安装(make install);看看三个步骤分别是个什么目的!

1.为什么需要执行三个步骤?

  • 源码安装必然安装的是源码包,源码包往往指的是由C,或C++等语言写的包,它们往往要比yum和rpm复杂,因此安装需要进行编译安装。
  • 就比如源码安装Nginx,因为Nginx是基于C语言开发的源代码程序,默认不能被Linux系统直接使用,需借助C编译器将源代码文件编译生成二进制文件,所以需执行源代码软件包部署核心三个步骤。

2.预编译的目的

  • 主要是检测Linux系统安装该所需的依赖环境、库文件,检测Linux系统是否存在GCC(C编译器),指定软件部署的路径、自定义软件编译参数、模块,最终产生Makefile文件。
    例如nginx预编译命令:
./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module

参数解析:

./configure    ##预编译
 --prefix=/usr/local/nginx/   ##指定部署路径
 --user=www --group=www   ##指定所属用户和组
  --with-http_stub_status_module   ##检测所须依赖

3.编译的目的

  • 主要是通过make编译工具读取第一步预编译产生的Makefile文件,将软件包中的源代码文件编译生成二进制文件。其中Makefile文件用途,告知make编译工具在编译源代码文件时,从哪个源码文件开始编译至哪个源码文件结束编译。
    以nginx编译结果为例:
    在这里插入图片描述

4.安装

  • 其实就是将第二步make编译产生的二进制文件,拷贝或者安装至Linux系统指定的安装目录,从而形成启动目录
    例如nginx最终的启动目录就是:/usr/local/nginx/。
make[1]: 进入目录“/home/ubuntu/Project/sym/SymphonyNo1_DataAquisition” g++ src/SymphonyNo1_DataAquisition.o -o build/SymphonyNo1_DataAquisition -pthread -I./inc -I../SymphonyNo1_Lib/Helper/inc -I../SymphonyNo1_Lib/Sym/inc -I../SymphonyNo1_IPC/Interface/inc -I../SymphonyNo1_IPC/PubSub/inc -I../SymphonyNo1_IPC/PushPull/inc -I../SymphonyNo1_Lib/DataAquisition/inc -L../SymphonyNo1_Lib/Helper/build -L../SymphonyNo1_Lib/Sym/build -L../SymphonyNo1_IPC/PubSub/build -L../SymphonyNo1_IPC/PushPull/build -L../SymphonyNo1_Lib/DataAquisition/build -lzmq -lhelper -lps -lpp -lsym -lda -std=c++17 -Wall -Wextra /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_close' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_new_rtu' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_free' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_read_registers' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `ModbusProtocol::ModbusProtocol()' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_connect' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_set_response_timeout' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_write_registers' /usr/bin/ld: ../SymphonyNo1_Lib/DataAquisition/build/libda.so: undefined reference to `modbus_new_tcp' collect2: error: ld returned 1 exit status make[1]: *** [../App.mk:11:build/SymphonyNo1_DataAquisition] 错误 1 make[1]: 离开目录“/home/ubuntu/Project/sym/SymphonyNo1_DataAquisition” make: *** [Makefile:43:symda] 错误 2
最新发布
03-28
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉里看星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值