NAS 上的編譯器、執行階段與建置環境
QTS 沒有編譯器。Bucket & Code Server IDE 會下載語言執行階段、交叉編譯器與供建置使用的完整 Linux 系統,依 sha256 檢查每次下載的檔案,並保存在資料資料夾中。本指南不會安裝任何新項目:我們使用建置環境與 Go 執行階段所提供的工具,編譯小程式,再確認它能在 NAS 上執行。
- 目錄執行階段、編譯器、系統
- 執行階段eval "$(bvs use …)"
- 環境供建置使用的 Linux 系統
- 建置bvs env run
- 檢查ELF 檢查器
圖片來自測試 NAS 上的 Bucket & Code Server IDE 面板,其資料資料夾為 /share/CACHEDEV1_DATA/BucketVS。
01Toolchains 頁面的功能
Toolchains 頁面會以分頁顯示目錄:
| 類型 | 說明 | 範例 |
|---|---|---|
| 根檔案系統 | 可解壓縮到環境中的 Linux 系統 | Debian 12 與 13、Ubuntu 22.04 與 24.04、Alpine 3.22 |
| 交叉工具鏈 | 為其他處理器建置程式的編譯器 | 適用於 aarch64、x86-64 與 armv7 的 Bootlin 工具鏈,搭配 glibc 或 musl |
| 執行階段 | 語言或建置工具 | Python, Go, Node.js, Zig, Rust, CMake, Ninja, Java |
| QNAP | QNAP 自有的建置套件 | QDK 2.5.0,供 bvs qbuild 與 Export as QPKG 使用 |
- Install 需要管理員角色。工作會將壓縮檔下載至資料資料夾的
toolchains/cache/,依目錄檢查 sha256(不符便刪除檔案),再將執行階段或交叉工具鏈解壓縮至toolchains/<kind>/<id>。進度會顯示在 Jobs 頁面;若下載中斷,重新開始安裝時會接續下載。 - 其他處理器的項目會隱藏。Bootlin 交叉工具鏈在 x86_64 上執行,因此 ARM NAS 不提供這些工具鏈。
- 目錄隨套件提供。pub.qnaputilities.com 的已簽署目錄可在不更新套件的情況下新增項目;Refresh the catalog 會立即擷取,內建的 cron 工作則每天擷取一次。
02在 Shell 中使用執行階段
已安裝項目的 bvs use 會顯示在 Shell 中啟用它所需的命令,例如用於編輯器終端機或 cron 工作。
# 在編輯器終端機中執行(Editor settings 頁面的 Open the editor)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go
Go 執行階段會設定 CGO_ENABLED=0,因此產生的程式採靜態連結,可在相同處理器的任何 NAS 上執行。交叉工具鏈的使用方式相同:eval "$(bvs use bootlin-aarch64-glibc-stable)" 會提供適用於 ARM 64 位元裝置的編譯器。
03建置環境
環境是解壓縮至資料資料夾 envs/<name> 的 Linux 系統。您可以在其中安裝套件(Debian 或 Ubuntu 上可用 apt install build-essential),安裝的內容會保留。資料資料夾中的專案資料夾在環境內對應為 /projects。
- 最快取得完整建置工具的方式,是使用 Apps 頁面 Examples 中的預設範例(管理員):Ubuntu 24.04 builder 會先用 apt-get 安裝建置工具,之後才顯示在清單中。其 glibc 為 2.39,是此套件支援的 NAS 中最低的版本,因此在其中建置的程式可在這些 NAS 上執行。

- New environment(管理員)會以您選擇的名稱解壓縮基本根檔案系統;若尚未安裝,會先下載。

- 每個環境都有 Open a shell,會開啟編輯器並提供已進入環境的終端機,另外還有 Clone、Export 與 Delete。

04在環境中編譯程式
從 NAS 上任何終端機執行 bvs env shell <name> 可進入環境,執行 bvs env run <name> -- <command> 則會在其中執行單一命令。兩者都從您執行命令的資料夾開始:專案資料夾下的子資料夾,在環境內對應為 /projects 下的相同子資料夾。
# projects/ 下某個資料夾中的 hello.cpp,在編輯器終端機中執行
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello
編譯器與其函式庫來自環境;程式則在 NAS 本身執行。下一步會檢查它是否能在 NAS 找到所需的內容。
05使用 ELF 檢查器檢查
Toolchains 頁面的 ELF inspector 分頁(開發者角色)會讀取程式或函式庫,以及目標自身的載入器資料,不執行任何內容,並指出此 NAS 或環境是否滿足其需求。請選擇檔案位置(應用程式的建置結果、專案資料夾、環境;管理員則可選 NAS 上任何檔案)與目標,再按下 Inspect。
What it needs 會繪出程式、載入的函式庫、每個函式庫的位置,以及要求的版本。此處的 C++ 程式需要 libstdc++.so.6 與 libc.so.6,而這台 NAS 的兩個函式庫皆定義了所需版本。
- 若缺少函式庫、函式庫未提供要求的版本,或 glibc 比目標的更新,結果會說明原因。將環境選為目標,即可檢視相同程式在該環境執行時的需求是否滿足。
- 在 NAS 上,
bvs ldd <file>會輸出相同結果;若要檢查環境,則用bvs ldd --env <name> <file>。 - 對於您要發佈的程式,App Builder 會檢查每次建置的每個檔案,其 Dependencies 分頁會提供修正方式。