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

程序構(gòu)建

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

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

配置

查詢可用的配置選項

./configure --help

配置路徑

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

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

編譯

編譯使用make編譯

make -f myMakefile

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

makefile Makefile

makefile編寫的要點

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

makefile中的全局自變量

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

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

更多選擇 CMake

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

編譯依賴的庫

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

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

如果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'

鏈接多庫時,多個庫之間如果有依賴,需要注意書寫的順序,右邊是左邊的前提;

g++編譯

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

選項說明:

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

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

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

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

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

$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é),參見 :ref:`ldd` 

安裝

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

$make install

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

總結(jié)

configure make install g++