Boa 是專為嵌入式環境與教學設計的輕量級開源 HTTP 伺服器。在 Linux 上編譯 Boa 需依賴 Flex(詞法分析器產生器)與 Bison(語法分析器產生器,GNU 版 Yacc)處理編譯前端模組。本文記錄完整編譯流程、常見錯誤及對應修正方案。
確保系統已安裝基礎建構工具鏈:
Debian/Ubuntu 系統可一鍵安裝:
apt-get install build-essential bison flex
make: yacc: Command not found
make: *** [y.tab.c] Error 127
原因:系統未安裝 Bison,Makefile 預設呼叫 yacc 產生語法分析檔。
解決:apt-get install bison。Bison 通常提供 yacc 符號連結,安裝後即可正常編譯。
make: lex: Command not found
make: *** [lex.yy.c] Error 127
原因:系統未安裝 Flex,無法產生詞法分析檔。
解決:apt-get install flex。
util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token
make: *** [util.o] Error 1
原因:某些 GCC 版本對 ## 拼接 -> 處理方式不同,導致巨集展開產生無效 Token。
解決:修改 src/compat.h 巨集定義:
// 原寫法(錯誤)
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
// 修正後
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
修改後執行 make clean && make 重新編譯。
make: Nothing to be done for `all'.
說明:Make 偵測所有目標檔案時間戳記較依賴檔新,判定無需重新編譯。若需強制重建,執行 make clean && make。
編譯 Boa 核心難點在於 Bison 與 Flex 缺漏 以及 GCC 版本差異導致的巨集相容性問題。依照上述步驟安裝工具、修正巨集,即可順利產出可執行檔,部署輕量級 HTTP 服務。