SDCC (Small Device C Compiler) 是開源免費的 8051 等單片機 C 編譯器,源碼可移植。本文記錄在 Windows 下用 VS2012 編譯 SDCC 全過程,解決依賴庫、工具鏈、項目升級等常見坑點。
svn://svn.code.sf.net/p/sdcc/code/trunk/sdccsdcc-src-yyyymmdd-rrrr.tar.bz2sdcc.sln,提示升級至 VS2012 格式 → 全部確認升級ucSim 子項目在 VS2012 下無法編譯,可右鍵「卸載項目」暫時排除D:\boost_1_69_0stage/lib(需先運行 bootstrap.bat && b2 構建庫)詞法/語法分析器生成需 GNU 工具。Windows 下推薦 UnxUtils:
UnxUtils.zip,解壓至 C:\UnxUtilsC:\UnxUtils\usr\local\wbin 加入系統 PATH 或 VS「VC++ 目錄 → 可執行文件目錄」stdcpp 項目編譯失敗sdcc\bin_vc\bin_vc\* 複製到 sdcc\bin\ 目錄,即可直接運行 sdcc.exe 編譯 51 代碼| 錯誤現象 | 原因 | 解決 |
|---|---|---|
| 找不到 bison/flex/gawk | 工具不在 PATH | 配置 UnxUtils 目錄到 VC++ 可執行文件目錄 |
| boost 鏈接錯誤 | 庫未構建或路徑錯誤 | 運行 b2 構建,正確配置庫目錄 |
| ucSim 編譯失敗 | VS2012 不兼容 | 卸載該項目,不影響主編譯器 |
| stdcpp 項目報錯 | flex/bison 版本不匹配 | 強制使用 UnxUtils 版本 |
cd sdcc\bin sdcc.exe --version # 輸出類似:SDCC 4.2.0 #12345 (MINGW64) ...
編寫簡單 51 程序測試編譯:
// test.c #includevoid main() { P1 = 0xFF; while(1); }
sdcc test.c # 生成 test.ihx 即成功
關鍵點:VS2012 升級方案、Boost 庫預構建、UnxUtils 提供 GNU 工具鏈、排除 ucSim。完成後即擁有可在 Windows 原生運行的 SDCC,可進一步研究編譯器前端/後端、優化通道、目標機描述等核心模塊。