偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解大廠工程師都喜歡用的源碼編譯三步曲

運(yùn)維
相對(duì)于包管理器和二進(jìn)制方式部署,源碼編譯就相對(duì)復(fù)雜一點(diǎn),但可以實(shí)現(xiàn)定制化,安全性更高,更可控。下面就詳細(xì)介紹一下源碼包安裝的三部曲

作為一個(gè)有實(shí)戰(zhàn)經(jīng)驗(yàn)的運(yùn)維老手都知道,部署軟件有多種方式,比如yum/apt包管理器方式,二進(jìn)制方式,源碼包編譯,當(dāng)然還有容器化Docker部署,Kubernetes方式部署。

相對(duì)于包管理器和二進(jìn)制方式部署,源碼編譯就相對(duì)復(fù)雜一點(diǎn),但可以實(shí)現(xiàn)定制化,安全性更高,更可控。

下面就詳細(xì)介紹一下源碼包安裝的三部曲:

./configure
make
make install

其實(shí)很多人到工作三五年了,都沒真正理解過這三行命令的意義。 今天我們就來(lái)把它講透,并告訴你為什么在大廠,源碼編譯反而比一鍵安裝更受歡迎。

第一步: ./configure

源碼一般會(huì)自帶一個(gè) configure 腳本(通常由 autoconf 工具生成)。它的主要作用是:

檢查系統(tǒng)環(huán)境:

  • 是否存在所需依賴庫(kù)(比如 zlib、openssl)不存在就需要安裝;
  • 編譯器和工具鏈?zhǔn)欠窨捎茫ㄈ?nbsp;gcc、g++、ld);
  • 操作系統(tǒng)特性(Linux、BSD、macOS 可能不同)。

生成 Makefile:

  • 根據(jù)檢查結(jié)果動(dòng)態(tài)生成配置文件(常見是 config.h 和 Makefile);
  • 不同環(huán)境下可能選擇不同的宏定義、優(yōu)化選項(xiàng)和依賴鏈接。

常見參數(shù):

./configure --prefix=/usr/local    # 指定安裝路徑
./configure --with-ssl             # 開啟 SSL 支持
./configure --disable-shared       # 禁用動(dòng)態(tài)庫(kù)

底層原理:configure 會(huì)調(diào)用 autoconf、automake 等工具生成一系列 shell 腳本檢測(cè),比如通過 AC_CHECK_LIB 測(cè)試庫(kù)是否存在,最后拼接出一份適合你系統(tǒng)的 Makefile。

第二步: make

有了 Makefile,make 工具就知道如何把源碼一步步編譯成目標(biāo)文件。

核心機(jī)制:依賴解析

  • make 會(huì)讀取 Makefile,解析各個(gè)目標(biāo)(target)的依賴關(guān)系;
  • 如果某個(gè) .c 文件被修改,只會(huì)重新編譯相關(guān)的 .o,而不是整個(gè)項(xiàng)目。

執(zhí)行規(guī)則一個(gè)典型的 Makefile 規(guī)則如下:

main.o: main.c main.h
    gcc -c main.c -o main.o
  • 左邊是目標(biāo)(main.o);
  • 右邊是依賴文件(main.c, main.h);
  • 下方命令是實(shí)際執(zhí)行的動(dòng)作。

并行編譯make -jN 可以開啟 N 個(gè)線程并行編譯,大幅縮短構(gòu)建時(shí)間。

make -j8

執(zhí)行過程一般為:源文件(.c/.cpp) → 編譯器 → 目標(biāo)文件(.o/.obj) → 鏈接器 → 可執(zhí)行文件

第三步: make install

編譯完成后,程序和庫(kù)文件還停留在源碼目錄中。

make install 會(huì)按照 Makefile 中定義的規(guī)則,將文件拷貝到系統(tǒng)標(biāo)準(zhǔn)目錄:

  • 可執(zhí)行文件 → /usr/local/bin/
  • 動(dòng)態(tài)庫(kù) → /usr/local/lib/
  • 頭文件 → /usr/local/include/
  • 配置文件 → /usr/local/etc/

如果在 configure 階段指定了 --prefix,安裝位置會(huì)發(fā)生改變,例如:

./configure --prefix=/data/nginx
make
make install

舉幾個(gè)大廠常用的例子:

  • Nginx: 包管理器版本往往精簡(jiǎn),HTTP/2、stream、Lua 模塊可能沒有,需要源碼編譯才能開啟。
  • MySQL / MariaDB: 特定存儲(chǔ)引擎(MyRocks、TokuDB)必須源碼編譯才支持。
  • PHP: 根據(jù)項(xiàng)目需求啟用 --with-fpm、--with-opcache,可大幅提升性能。
  • Redis: 最新版本的特性(比如 I/O 多線程)常常要通過源碼第一時(shí)間獲取。
  • OpenSSL: 安全補(bǔ)丁更新極快,源碼編譯是最快的修復(fù)方式。

在真實(shí)生產(chǎn)環(huán)境里,想要性能調(diào)優(yōu)、功能裁剪、快速響應(yīng)漏洞,源碼編譯幾乎是標(biāo)配。

當(dāng)然平時(shí)測(cè)試環(huán)境或業(yè)務(wù)量不是很大的,用包管理或二進(jìn)制部署更加快速,不用弄那么復(fù)雜,也可以用Docker或Kubernetes部署。本文只是想讓大家了解一下源碼編譯安裝的原理。

責(zé)任編輯:趙寧寧 來(lái)源: 運(yùn)維李哥不背鍋
相關(guān)推薦

2012-08-08 17:05:36

App運(yùn)營(yíng)

2011-04-11 16:37:21

2014-04-24 14:00:35

OpenGL ES 2編程

2013-12-01 15:34:18

綠色數(shù)據(jù)中心數(shù)據(jù)中心

2024-04-18 11:43:28

緩存數(shù)據(jù)庫(kù)Redis

2021-12-17 09:00:00

數(shù)據(jù)中心運(yùn)營(yíng)云計(jì)算

2010-05-17 09:49:19

DataCore虛擬化

2014-08-05 14:49:39

Web響應(yīng)式設(shè)計(jì)design

2020-07-27 10:00:18

遠(yuǎn)程辦公網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2021-09-04 23:27:58

Axios源碼流程

2020-11-02 10:51:17

Express源碼Web

2022-03-25 10:23:40

用戶體驗(yàn)APP優(yōu)化

2012-02-07 17:25:50

2009-07-09 19:19:11

SiteView運(yùn)維管理游龍科技

2009-01-20 10:42:00

局域網(wǎng)硬件故障排除

2021-03-02 07:02:45

Linux操作系統(tǒng)

2021-09-04 23:26:26

源碼ExpressNode

2009-03-24 18:58:31

虛擬化通信

2021-09-13 20:37:50

AI

2019-11-18 09:56:48

谷歌Go語(yǔ)言開發(fā)者
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)