Unofficial
Op deze pagina
  1. 01Wat de pagina Toolchains biedt
  2. 02Een runtime in uw shell
  3. 03Bouwomgevingen
  4. 04Een programma in een omgeving compileren
  5. 05Controleren met de ELF-inspecteur

Compilers, runtimes en bouwomgevingen op uw NAS

QTS heeft geen compiler. Bucket & Code Server IDE downloadt taalruntimes, cross-compilers en complete Linux-systemen om in te bouwen, controleert elke download met zijn sha256 en bewaart ze in de gegevensmap. Deze handleiding installeert niets nieuws: ze gebruikt de gereedschappen van een bouwomgeving en de Go-runtime, compileert een klein programma en controleert of het op de NAS draait.

  1. Catalogusruntimes, compilers, systemen
  2. Runtimeeval "$(bvs use …)"
  3. Omgevingeen Linux-systeem om in te bouwen
  4. Bouwenbvs env run
  5. Controlerende ELF-inspecteur

De afbeeldingen komen uit het paneel van Bucket & Code Server IDE op een test-NAS met de gegevensmap /share/CACHEDEV1_DATA/BucketVS.

01Wat de pagina Toolchains biedt

De pagina Toolchains toont een catalogus met tabbladen:

TypeBeschrijvingVoorbeelden
Rootbestandssysteemeen Linux-systeem om in een omgeving uit te pakkenDebian 12 en 13, Ubuntu 22.04 en 24.04, Alpine 3.22
Cross-toolchaineen compiler die voor een andere processor bouwtBootlin-toolchains voor aarch64, x86-64 en armv7, met glibc of musl
Runtimeeen taal of bouwgereedschapPython, Go, Node.js, Zig, Rust, CMake, Ninja, Java
QNAPQNAPs eigen bouwpakketQDK 2.5.0, voor bvs qbuild en Export as QPKG
Het tabblad Runtimes: Go 1.27 geïnstalleerd, met bvs use en Remove; Zig 0.15 met de knop Install
  • Install vereist de beheerdersrol. De taak downloadt het archief naar toolchains/cache/ in de gegevensmap, vergelijkt zijn sha256 met de catalogus (een afwijking verwijdert het bestand) en pakt een runtime of cross-toolchain uit naar toolchains/<kind>/<id>. De voortgang staat op de pagina Jobs; een onderbroken download wordt hervat wanneer de installatie opnieuw start.
  • Vermeldingen voor een andere processor zijn verborgen. De Bootlin-cross-toolchains draaien op x86_64, dus een ARM-NAS biedt er geen aan.
  • De catalogus wordt met het pakket meegeleverd. Een ondertekende catalogus van pub.qnaputilities.com kan vermeldingen toevoegen zonder nieuw pakket; Refresh the catalog haalt die meteen op en een ingebouwde crontaak doet dat dagelijks.
Het tabblad QNAP: QNAP QDK 2.5.0 (qbuild) geïnstalleerd

02Een runtime in uw shell

bvs use bij een geïnstalleerde vermelding toont de regels die hem bruikbaar maken in een shell, zoals de terminal van de editor of een crontaak.

De geïnstalleerde Go 1.27-vermelding op de pagina Toolchains: wat hij bouwt, waar hij op schijf staat en de uitvoer van bvs use go-1.27-x86_64: export PATH met de bin-map van de runtime, export CGO_ENABLED=0
# in de terminal van de editor (Open the editor op de pagina Editor settings)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go

De Go-runtime stelt CGO_ENABLED=0 in, waardoor zijn programma's statisch zijn en op elke NAS met dezelfde processor draaien. Een cross-toolchain werkt hetzelfde: eval "$(bvs use bootlin-aarch64-glibc-stable)" geeft een compiler voor ARM-apparaten van 64 bit.

03Bouwomgevingen

Een omgeving is een Linux-systeem dat is uitgepakt in envs/<name> in de gegevensmap. U kunt er pakketten installeren (apt install build-essential op Debian of Ubuntu), en wat u installeert blijft bewaard. De projectenmap uit de gegevensmap is erin beschikbaar als /projects.

  • De snelste manier om alles voor het bouwen te krijgen is een voorinstelling uit Examples op de pagina Apps (beheerder): de Ubuntu 24.04 builder installeert het bouwgereedschap met apt-get voordat de omgeving verschijnt. Zijn glibc is 2.39, de laagste versie op alle NAS-systemen waarop het pakket draait, dus zijn gebouwde programma's draaien op al die systemen. De voorbeeldkaart Ubuntu 24.04 builder (full): de pakketten die de aanmaaktaak installeert, het benodigde rootbestandssysteem en Use this example
  • New environment (beheerder) pakt een kaal rootbestandssysteem uit onder een zelfgekozen naam en downloadt het eerst als het niet geïnstalleerd is. Het venster New environment: Name deb12, Root filesystem Debian 12 bookworm, glibc 2.36 en de knop Create
  • Elke omgeving heeft Open a shell, dat de editor opent met een terminal die al in die omgeving draait, plus Clone, Export en Delete. De omgevingen debian12-builder (glibc 2.36) en ubuntu2404-builder (glibc 2.39), elk met Open a shell, Clone, Export en Delete en de bijbehorende opdracht bvs env shell

04Een programma in een omgeving compileren

Vanuit elke terminal op de NAS opent bvs env shell <name> een shell in een omgeving en voert bvs env run <name> -- <command> daar één opdracht uit. Beide starten in de map vanwaar u ze uitvoert: een submap van de projectenmap is binnen de omgeving dezelfde submap onder /projects.

# hello.cpp in een map onder projects/, in de terminal van de editor
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello

De compiler en zijn bibliotheken komen uit de omgeving; het programma draait op de NAS zelf. De volgende stap controleert of het daar vindt wat het nodig heeft.

05Controleren met de ELF-inspecteur

Het tabblad ELF inspector op de pagina Toolchains (ontwikkelaarsrol) leest een programma of bibliotheek en de eigen loadergegevens van het doel, zonder iets uit te voeren. Het geeft aan of deze NAS of een omgeving aan alle vereisten voldoet. Kies waar het bestand staat (een app-build, de projectenmap, een omgeving of voor een beheerder elk bestand op de NAS), het doel en druk op Inspect.

De ELF-inspecteur: projectenmap gekozen, Path hello/hello, Target This NAS (x86_64), LD_LIBRARY_PATH leeg Bevindingen: bekeken op de NAS, x86_64, glibc 2.43, 6 ELF-bestanden gelezen, 0 fouten, 0 waarschuwingen; geen probleem: alle vereisten van de 6 bestanden zijn gevonden in versies die de bibliotheken definiëren

What it needs tekent het programma, de bibliotheken die het laadt en de locatie van elke bibliotheek, met de gevraagde versies. Hier heeft het C++-programma libstdc++.so.6 en libc.so.6 nodig, en deze NAS heeft beide met de vereiste versies.

Vereisten: hello verbonden met ld-linux-x86-64.so.2, libc.so.6, libgcc_s.so.1, libm.so.6 en libstdc++.so.6 van de NAS, met de benodigde versies GLIBC_2.34, GLIBCXX_3.4.32 en andere
  • Een ontbrekende bibliotheek, een versie die een bibliotheek niet biedt of een glibc nieuwer dan die van het doel levert een bevinding met uitleg op. Kies een omgeving als doel om hetzelfde programma te bekijken zoals het daar zou draaien.
  • Op de NAS toont bvs ldd <file> hetzelfde, en bvs ldd --env <name> <file> doet dat voor een omgeving.
  • Voor programma's die u verspreidt voert App Builder dit uit voor elk bestand van elke build; het tabblad Dependencies biedt de oplossingen.