系統程式 - GNU 開發工具

GNU 程式設計

GNU 程式簡介

GNU 與 C 語言

gcc 編譯器

glibc 函式庫

make 建置

ld 連結器

as 組譯器

ar 函式庫

objdump

objcopy

訊息

相關網站

參考文獻

最新修改

簡體版

English

GNU 工具簡介

GNU 開發工具的核心是 gcc 編譯器,該編譯器設計得相當有彈性,因此廣為嵌入式系統領域所使用,並且被 Linus Torvalds 用來建構 Linux 作業系統。

『GNU 開發工具』與『Visual Studio』都可以用作 C/C++ 與組合語言的開發工具,兩者各有優缺點。GNU工具的優點是短小精悍、支援平台眾多、而且開放原始碼。而Visual Studio 的優點是開發環境完整、視覺化開發介面優良、並且與微軟的 Windows 密切整合。

GNU 的系統軟體

以下是微軟與 GNU 兩套工具中常用的命令對照表,GNU 版的 C 語言編譯器是 gcc,組譯器是 as,連結器是 ld,專案建置器是 make,函式庫建構程式是 ar,目的檔傾印程式是 objdump。這些是 GNU 命令列版本的主要開發工具。

工具 微軟 GNU
C編譯器 cl gcc
組譯器 ml as
連結器 link ld
專案建制器 nmake make
函式庫建構 lib ar
目的檔傾印 dumpbin objdump

GNU 工具的用法

上述 GNU 工具的簡易用法如下,詳細的用法請參考 GNU 說明文件 — http://www.gnu.org/manual/

工具 工具類型 範例 說明
gcc C語言編譯器 (GNU C Compiler) gcc hello.c -o hello.o
as 組譯器 (Assembler) as hello.s -o hello.o 將 hello.s 組譯為 hello.o
ld 連結器 (Linker) ld -o abc.o a.o b.o c.o 將a.o, b.o, c.o連結成執行檔 abc.o
ar 函式庫製作 (Archive) ar -r libabc.a a.o b.o c.o 將a.o, b.o, c.o包裝成函數庫 libabc.a
nm 目標檔中的符號 (name mangling) nm hello.o 看hello.o 目標檔的符號表。
objdump 目標檔傾印 (Object File Dump) objdump -x hello.o 查看目標檔資訊
objcopy 複製目標檔 (Object File Copy) objcopy -O binary hello.elf hello.bin 將 elf 檔轉換為 binary 檔
strip 去除除錯資訊 strip a.o 把a.o 當中的符號表與除錯資訊去除。
strings 觀看字串表 strings a.o 觀看 a.o 檔中的字串表,會顯示符號名稱與分段名稱。
ltrace 追蹤函數呼叫路徑 ltrace a.o 追蹤函數呼叫路徑 (在 Cygwin中沒有)。

結語

由於 GNU 工具在嵌入式系統中相當常用,而且是開放原始碼的始祖,因此對系統程式設計師而言,是非熟悉不可的一套開發工具。最近由於 Linux 在高階嵌入式系統當中的盛行,使得 GNU 工具變得更加重要。像是 Google 所釋出的 Android 手機開發平台,就是採用 GNU/Linux 架構的開放原始碼手機平台。系統程式設計師只有熟悉 GNU 工具才能進一步理解 Linux 與 Android 平台。

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License