工具鏈:llvm-mingw(主線)
本頁於 2026-09 以 llvm-mingw 20260616(UCRT,x86_64 版;clang 22.1.8)驗證,x86 與 x64 兩種架構都實際編譯並載入主程式確認。
沒有偏好就用這個。 主程式本身就是用它編出來的,PDK 的 build.bat 也預設走這條路
(不帶參數等於 clangmingw x64 debug)。好處:
- 一份安裝同時能編 32 位元與 64 位元,不用裝兩套。
- 是一個 zip,解壓就能用,不需要安裝程式、不動登錄檔。
- 不依賴 Visual Studio。
下載與安裝
-
到 llvm-mingw 的 Releases 頁 , 在最新版本的 Assets 裡下載
llvm-mingw-<日期>-ucrt-x86_64.zip(撰寫本頁時最新的是llvm-mingw-20260922-ucrt-x86_64.zip;本頁的驗證用的是 20260616 那一版)。同一頁還有msvcrt版與 Linux 版,不要選錯,要選ucrt與x86_64:x86_64指的是「這個編譯器本身跑在 64 位元 Windows 上」, 它同時附有編出 32 位元與 64 位元 DLL 的能力;ucrt是它使用的 C 執行階段函式庫。 -
把 zip 解壓縮。解出來是一個叫
llvm-mingw-<日期>-ucrt-x86_64的資料夾,裡面有bin\。 -
把整個資料夾放到一個固定的位置。放在下面這幾個地方之一,
build.bat會自己找到, 什麼都不用設定:D:\Program Files\或C:\Program Files\底下(資料夾名字保持llvm-mingw-...開頭)C:\llvm-mingw或D:\llvm-mingw(把資料夾改名成這個)
放在別的地方也可以,看下一節。
build.bat 怎麼找到它
plugins\hello_ic\build.bat 的 clangmingw 車道依序找:
- 環境變數
LLVM_MINGW_DIR(安裝根目錄,也就是裡面有bin\的那一層)。 有設就只信它:路徑不對會直接報錯,不會偷偷改用別的編譯器。 PATH上找得到的x86_64-w64-mingw32-clang.exe(x86 則是i686-w64-mingw32-clang.exe)。D:\Program Files底下、再來是C:\Program Files底下的llvm-mingw-*資料夾(同一個目錄裡 日期最新的優先;兩個磁碟都有的話,D 槽優先)。C:\llvm-mingw、再來是D:\llvm-mingw。
放在別的地方:在 plugins\hello_ic\ 裡把 toolchain.local.bat.sample 複製成
toolchain.local.bat,取消註解並改路徑:
set "LLVM_MINGW_DIR=C:\tools\llvm-mingw-20260616-ucrt-x86_64"toolchain.local.bat 只是放在你電腦上的設定檔,PDK 不帶它(只有 .sample)。
你自己的專案若用 git,請自己把它加進 .gitignore,免得把你的本機路徑提交出去。先直接跑
build.bat,能編就不需要這個檔案。
建置與驗證
在 plugins\hello_ic\ 開命令提示字元(cmd):
build.bat clangmingw x64 release
build.bat clangmingw x86 release(在 PowerShell 裡要寫成 .\build.bat ...。)成功時最後一行是:
[ OK ] plugin built: plugins\hello_ic.dll (clangmingw x64 release)產物是 plugins\hello_ic.dll——注意是 plugins\hello_ic\ 的上一層。x86 與 x64 會寫到
同一個檔名,後編的蓋掉先編的,所以一次只放一種進主程式;為什麼一定要分開編,見
架構要對:x86/x64。
編好之後怎麼載進主程式看它動,見步驟 1。
常見問題
llvm-mingw was not found:build.bat 找不到編譯器。照上面「放在別的地方」設
LLVM_MINGW_DIR,或把 bin\ 加進 PATH。
LLVM_MINGW_DIR is set to "..." but ...-clang.exe is not under its bin directory:
你設的路徑不對,少了一層或多了一層。要指到裡面有 bin\ 的那個資料夾。
你自己加的程式碼出現 -pedantic 警告或錯誤:PDK 範例以 C89 標準編譯(-std=c89 -pedantic),
所以變數宣告要放在區塊最前面、註解用 /* */。這是刻意的,這樣你的 Plugin 在最挑剔的
編譯器(例如 VC6)上也能編過。