Unofficial
På den här sidan
  1. 01Vad sidan Toolchains erbjuder
  2. 02En körmiljö i ditt skal
  3. 03Byggmiljöer
  4. 04Kompilera ett program i en miljö
  5. 05Kontrollera med ELF-inspektören

Kompilatorer, körmiljöer och byggmiljöer på din NAS

QTS saknar kompilator. Bucket & Code Server IDE hämtar körmiljöer för språk, korskompilatorer och hela Linux-system att bygga i, kontrollerar varje hämtning mot dess sha256 och sparar dem i datamappen. Den här guiden installerar inget nytt: den använder verktygen i en byggmiljö och Go-körmiljön, kompilerar ett litet program och kontrollerar att det körs på NAS:en.

  1. Katalogkörmiljöer, kompilatorer, system
  2. Körmiljöeval "$(bvs use …)"
  3. Miljöett Linux-system att bygga i
  4. Byggbvs env run
  5. KontrolleraELF-inspektören

Bilderna kommer från panelen i Bucket & Code Server IDE på en test-NAS vars datamapp är /share/CACHEDEV1_DATA/BucketVS.

01Vad sidan Toolchains erbjuder

Sidan Toolchains visar en katalog uppdelad på flikar:

TypBeskrivningExempel
Rotfilsystemett Linux-system att packa upp i en miljöDebian 12 och 13, Ubuntu 22.04 och 24.04, Alpine 3.22
Korsverktygskedjaen kompilator som bygger för en annan processorBootlin-verktygskedjor för aarch64, x86-64 och armv7, med glibc eller musl
Körmiljöett språk eller ett byggverktygPython, Go, Node.js, Zig, Rust, CMake, Ninja, Java
QNAPQNAP:s eget byggpaketQDK 2.5.0, för bvs qbuild och Export as QPKG
Fliken Runtimes: Go 1.27 installerat, med bvs use och Remove; Zig 0.15 med knappen Install
  • Install kräver administratörsrollen. Jobbet hämtar arkivet till toolchains/cache/ i datamappen, kontrollerar dess sha256 mot katalogen (en avvikelse tar bort filen) och packar upp en körmiljö eller korsverktygskedja i toolchains/<kind>/<id>. Förloppet visas på sidan Jobs, och en avbruten hämtning återupptas när installationen startas igen.
  • Poster för en annan processor är dolda. Bootlins korsverktygskedjor körs på x86_64, så en ARM-NAS har inga sådana.
  • Katalogen följer med paketet. En signerad katalog från pub.qnaputilities.com kan lägga till poster utan ett nytt paket; Refresh the catalog hämtar den direkt och ett inbyggt cronjobb hämtar den varje dag.
Fliken QNAP: QNAP QDK 2.5.0 (qbuild) installerat

02En körmiljö i ditt skal

bvs use på en installerad post visar raderna som gör den tillgänglig i ett skal, till exempel redigerarens terminal eller ett cronjobb.

Den installerade posten Go 1.27 på sidan Toolchains: vad den bygger, var den finns på disk och vad bvs use go-1.27-x86_64 skriver ut: export PATH med körmiljöns bin-mapp, export CGO_ENABLED=0
# i redigerarens terminal (Open the editor på sidan Editor settings)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go

Go-körmiljön sätter CGO_ENABLED=0, så dess program är statiska och körs på varje NAS med samma processor. En korsverktygskedja fungerar likadant: eval "$(bvs use bootlin-aarch64-glibc-stable)" ger en kompilator för ARM-enheter med 64 bitar.

03Byggmiljöer

En miljö är ett Linux-system uppackat i envs/<name> i datamappen. Du kan installera paket i den (apt install build-essential på Debian eller Ubuntu), och det du installerar finns kvar. Datamappens projektmapp finns som /projects inne i miljön.

  • Det snabbaste sättet att få allt för att bygga är en förinställning från Examples på sidan Apps (administratör): Ubuntu 24.04 builder installerar byggverktygen med apt-get innan miljön visas. Dess glibc är 2.39, den lägsta versionen bland alla NAS:ar som paketet körs på, så dess byggda program körs på dem alla. Exempelkortet Ubuntu 24.04 builder (full): paketen som skapandejobbet installerar, rotfilsystemet som behövs och Use this example
  • New environment (administratör) packar upp ett enkelt rotfilsystem under ett namn du väljer och hämtar det först om det inte är installerat. Dialogrutan New environment: Name deb12, Root filesystem Debian 12 bookworm, glibc 2.36 och knappen Create
  • Varje miljö har Open a shell, som öppnar redigeraren med en terminal redan inne i miljön, samt Clone, Export och Delete. Miljöerna debian12-builder (glibc 2.36) och ubuntu2404-builder (glibc 2.39), båda med Open a shell, Clone, Export och Delete samt sitt bvs env shell-kommando

04Kompilera ett program i en miljö

Från valfri terminal på NAS:en går bvs env shell <name> in i en miljö och bvs env run <name> -- <command> kör ett kommando i den. Båda startar i mappen du kör dem från: en undermapp i projektmappen är samma undermapp under /projects inne i miljön.

# hello.cpp i en mapp under projects/, i redigerarens terminal
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello

Kompilatorn och dess bibliotek kommer från miljön; programmet körs på själva NAS:en. Nästa steg kontrollerar om det hittar allt det behöver där.

05Kontrollera med ELF-inspektören

Fliken ELF inspector på sidan Toolchains (utvecklarroll) läser ett program eller bibliotek och målets egna laddardata utan att köra något. Den visar om denna NAS eller en miljö uppfyller kraven. Välj var filen finns (en apps bygge, projektmappen, en miljö eller för en administratör valfri fil på NAS:en), målet och tryck på Inspect.

ELF-inspektören: projektmappen vald, Path hello/hello, Target This NAS (x86_64), LD_LIBRARY_PATH tomt Resultat: granskat på NAS:en, x86_64, glibc 2.43, 6 ELF-filer lästa, 0 fel, 0 varningar; inget problem: alla krav från de 6 filerna hittades i versioner som biblioteken definierar

What it needs ritar programmet, biblioteken det läser in och var varje bibliotek finns, med de versioner som efterfrågas. Här behöver C++-programmet libstdc++.so.6 och libc.so.6, och denna NAS har båda med de versioner som behövs.

Krav: hello länkat till ld-linux-x86-64.so.2, libc.so.6, libgcc_s.so.1, libm.so.6 och libstdc++.so.6 från NAS:en samt versionerna som behövs: GLIBC_2.34, GLIBCXX_3.4.32 och andra
  • Ett saknat bibliotek, en version som biblioteket inte ger eller en glibc nyare än målets ger ett fynd med en förklaring. Välj en miljö som mål för att granska samma program så som det skulle köras där.
  • På NAS:en skriver bvs ldd <file> ut samma sak, och bvs ldd --env <name> <file> gör det för en miljö.
  • För program som du distribuerar gör App Builder detta för varje fil i varje bygge, och fliken Dependencies erbjuder rättelserna.