鍍金池/ 教程/ Linux/ 程序構(gòu)建
進(jìn)程管理工具
objdump 二進(jìn)制文件分析
scp 跨機(jī)遠(yuǎn)程拷貝
crontab 定時(shí)任務(wù)
readelf elf文件格式分析
pstack 跟蹤進(jìn)程棧
系統(tǒng)管理及IPC資源管理
vmstat 監(jiān)視內(nèi)存使用情況
strace 跟蹤進(jìn)程中的系統(tǒng)調(diào)用
sar 找出系統(tǒng)瓶頸的利器
ipcs 查詢進(jìn)程間通信狀態(tài)
ps 進(jìn)程查看器
性能優(yōu)化
wget 文件下載
top linux下的任務(wù)管理器
磁盤(pán)管理
size 查看程序內(nèi)存映像大小
free 查詢可用內(nèi)存
文件及目錄管理
iostat 監(jiān)視I/O子系統(tǒng)
性能監(jiān)控
程序構(gòu)建
學(xué)會(huì)使用命令幫助
gdb 調(diào)試?yán)?/span>
網(wǎng)絡(luò)工具
nm 目標(biāo)文件格式分析
lsof 一切皆文件
用戶管理工具
程序調(diào)試
ldd 查看程序依賴庫(kù)
文本處理

程序構(gòu)建

一般源代碼提供的程序安裝需要通過(guò)配置、編譯、安裝三個(gè)步驟;

  1. 配置做的工作主要是檢查當(dāng)前環(huán)境是否滿足要安裝軟件的依賴關(guān)系,以及設(shè)置程序安裝所需要的初始化信息,比如安裝路徑,需要安裝哪些組件;配置完成,會(huì)生成makefile文件供第二步make使用;
  2. 編譯是對(duì)源文件進(jìn)行編譯鏈接生成可執(zhí)行程序;
  3. 安裝做的工作就簡(jiǎn)單多了,就是將生成的可執(zhí)行文件拷貝到配置時(shí)設(shè)置的初始路徑下;

配置

查詢可用的配置選項(xiàng)

./configure --help

配置路徑

./configure --prefix=/usr/local/snmp

--prefix是配置使用的最常用選項(xiàng),設(shè)置程序安裝的路徑;

編譯

編譯使用make編譯

make -f myMakefile

通過(guò)-f選項(xiàng)顯示指定需要編譯的makefile;如果待使用makefile文件在當(dāng)前路徑,且文件名為以下幾個(gè),則不用顯示指定:

makefile Makefile

makefile編寫(xiě)的要點(diǎn)

  • 必須滿足第一條規(guī)則,滿足后停止
  • 除第一條規(guī)則,其他無(wú)順序

makefile中的全局自變量

  • $@目標(biāo)文件名
  • @^所有前提名,除副本
  • @+所有前提名,含副本
  • @<一個(gè)前提名
  • @?所有新于目標(biāo)文件的前提名
  • @*目標(biāo)文件的基名稱

系統(tǒng)學(xué)習(xí)makefile的書(shū)寫(xiě)規(guī)則,請(qǐng)參考 跟我一起學(xué)makefile [#]_

更多選擇 CMake

CMake是一個(gè)跨平臺(tái)的安裝(編譯)工具,可以用簡(jiǎn)單的語(yǔ)句來(lái)描述所有平臺(tái)的安裝(編譯過(guò)程)。他能夠輸出各種各樣的makefile或者project文件。使用CMake,能夠使程序員從復(fù)雜的編譯連接過(guò)程中解脫出來(lái)。它使用一個(gè)名為 CMakeLists.txt 的文件來(lái)描述構(gòu)建過(guò)程,可以生成標(biāo)準(zhǔn)的構(gòu)建文件,如 Unix/Linux 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。

編譯依賴的庫(kù)

makefile編譯過(guò)程中所依賴的非標(biāo)準(zhǔn)庫(kù)和頭文件路徑需要顯示指明

CPPFLAGS -I標(biāo)記非標(biāo)準(zhǔn)頭文件存放路徑
LDFLAGS  -L標(biāo)記非標(biāo)準(zhǔn)庫(kù)存放路徑

如果CPPFLAGS和LDFLAGS已在用戶環(huán)境變量中設(shè)置并且導(dǎo)出(使用export關(guān)鍵字),就不用再顯示指定;

make -f myMakefile LDFLAGS='-L/var/xxx/lib -L/opt/mysql/lib' 
    CPPFLAGS='-I/usr/local/libcom/include -I/usr/local/libpng/include'

鏈接多庫(kù)時(shí),多個(gè)庫(kù)之間如果有依賴,需要注意書(shū)寫(xiě)的順序,右邊是左邊的前提;

g++編譯

g++ -o unixApp unixApp.o a.o b.o

選項(xiàng)說(shuō)明:

  • -o:指明生成的目標(biāo)文件
  • -g:添加調(diào)試信息
  • -E: 查看中間文件

應(yīng)用:查詢宏展開(kāi)的中間文件:

在g++的編譯選項(xiàng)中,添加 -E選項(xiàng),然后去掉-o選項(xiàng) ,重定向到一個(gè)文件中即可

g++ -g -E unixApp.cpp  -I/opt/app/source > midfile

查詢應(yīng)用程序需要鏈接的庫(kù)

$ldd myprogrammer
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)

.. note

關(guān)于ldd的使用細(xì)節(jié),參見(jiàn) :ref:`ldd` 

安裝

安裝做的工作就簡(jiǎn)單多了,就是將生成的可執(zhí)行文件拷貝到配置時(shí)設(shè)置的初始路徑下

$make install

其實(shí) install 就是makefile中的一個(gè)規(guī)則,打開(kāi)makefile文件后可以查看程序安裝的所做的工作;

總結(jié)

configure make install g++