Unofficial
Auf dieser Seite
  1. 01Was die Seite Toolchains bietet
  2. 02Eine Laufzeitumgebung in Ihrer Shell
  3. 03Buildumgebungen
  4. 04Ein Programm in einer Umgebung kompilieren
  5. 05Mit dem ELF-Inspektor prüfen

Compiler, Laufzeit- und Buildumgebungen auf Ihrem NAS

QTS enthält keinen Compiler. Bucket & Code Server IDE lädt Sprachlaufzeiten, Cross-Compiler und ganze Linux-Systeme zum Bauen herunter, prüft jeden Download anhand seiner sha256 und bewahrt sie im Datenordner auf. Diese Anleitung installiert nichts Neues: Sie nutzt die Werkzeuge einer Buildumgebung und der Go-Laufzeit, kompiliert ein kleines Programm und prüft, ob es auf dem NAS läuft.

  1. KatalogLaufzeiten, Compiler, Systeme
  2. Laufzeiteval "$(bvs use …)"
  3. Umgebungein Linux-System zum Bauen
  4. Bauenbvs env run
  5. Prüfender ELF-Inspektor

Die Bilder stammen aus dem Panel von Bucket & Code Server IDE auf einem Test-NAS mit dem Datenordner /share/CACHEDEV1_DATA/BucketVS.

01Was die Seite Toolchains bietet

Die Seite Toolchains zeigt einen Katalog mit Registerkarten:

TypBeschreibungBeispiele
Root-Dateisystemein Linux-System zum Entpacken in eine UmgebungDebian 12 und 13, Ubuntu 22.04 und 24.04, Alpine 3.22
Cross-Toolchainein Compiler, der für einen anderen Prozessor bautBootlin-Toolchains für aarch64, x86-64 und armv7 mit glibc oder musl
Laufzeitumgebungeine Sprache oder ein BuildwerkzeugPython, Go, Node.js, Zig, Rust, CMake, Ninja, Java
QNAPQNAPs eigenes BuildpaketQDK 2.5.0 für bvs qbuild und Export as QPKG
Registerkarte Runtimes: Go 1.27 installiert, mit bvs use und Remove; Zig 0.15 mit der Schaltfläche Install
  • Install erfordert die Adminrolle. Der Auftrag lädt das Archiv nach toolchains/cache/ im Datenordner, gleicht seine sha256 mit dem Katalog ab (bei einer Abweichung wird die Datei gelöscht) und entpackt eine Laufzeit oder Cross-Toolchain nach toolchains/<kind>/<id>. Der Fortschritt steht auf der Seite Jobs; ein unterbrochener Download wird beim erneuten Installieren fortgesetzt.
  • Einträge für einen anderen Prozessor sind ausgeblendet. Die Bootlin-Cross-Toolchains laufen auf x86_64, daher bietet ein ARM-NAS keine davon an.
  • Der Katalog wird mit dem Paket geliefert. Ein signierter Katalog von pub.qnaputilities.com kann Einträge ohne neues Paket ergänzen; Refresh the catalog lädt ihn sofort, ein eingebauter Cronjob täglich.
Registerkarte QNAP: QNAP QDK 2.5.0 (qbuild) installiert

02Eine Laufzeitumgebung in Ihrer Shell

bvs use bei einem installierten Eintrag zeigt die Zeilen, die ihn in einer Shell nutzbar machen, etwa im Terminal des Editors oder in einem Cronjob.

Installierter Go-1.27-Eintrag auf der Seite Toolchains: seine Buildziele, sein Speicherort und die Ausgabe von bvs use go-1.27-x86_64: export PATH mit dem bin-Ordner der Laufzeit, export CGO_ENABLED=0
# im Terminal des Editors (Open the editor auf der Seite Editor settings)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go

Die Go-Laufzeit setzt CGO_ENABLED=0. Ihre Programme sind damit statisch und laufen auf jedem NAS mit demselben Prozessor. Eine Cross-Toolchain funktioniert genauso: eval "$(bvs use bootlin-aarch64-glibc-stable)" stellt einen Compiler für ARM-64-Bit-Geräte bereit.

03Buildumgebungen

Eine Umgebung ist ein Linux-System, das nach envs/<name> im Datenordner entpackt wurde. Sie können darin Pakete installieren (apt install build-essential unter Debian oder Ubuntu); das Installierte bleibt erhalten. Der Projektordner des Datenordners ist darin als /projects verfügbar.

  • Am schnellsten erhalten Sie eine vollständige Buildumgebung über eine Vorlage aus Examples auf der Seite Apps (Adminrolle): Der Ubuntu 24.04 builder installiert die Buildwerkzeuge mit apt-get, bevor er erscheint. Seine glibc-Version ist 2.39, die niedrigste aller vom Paket unterstützten NAS. Seine Programme laufen daher auf all diesen NAS. Beispielkarte Ubuntu 24.04 builder (full): die vom Erstellungsauftrag installierten Pakete, das benötigte Root-Dateisystem und Use this example
  • New environment (Admin) entpackt ein einfaches Root-Dateisystem unter einem Namen Ihrer Wahl und lädt es zuerst herunter, falls es noch nicht installiert ist. Dialog New environment: Name deb12, Root filesystem Debian 12 bookworm, glibc 2.36 und Schaltfläche Create
  • Jede Umgebung bietet Open a shell, das den Editor mit einem Terminal bereits in dieser Umgebung öffnet, sowie Clone, Export und Delete. Umgebungen debian12-builder (glibc 2.36) und ubuntu2404-builder (glibc 2.39), jeweils mit Open a shell, Clone, Export und Delete sowie ihrem Befehl bvs env shell

04Ein Programm in einer Umgebung kompilieren

Von jedem Terminal auf dem NAS aus öffnet bvs env shell <name> eine Shell in der Umgebung, während bvs env run <name> -- <command> darin einen Befehl ausführt. Beide starten im Ordner des Aufrufs: Ein Unterordner des Projektordners ist darin derselbe Unterordner unter /projects.

# hello.cpp in einem Ordner unter projects/, im Terminal des Editors
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello

Der Compiler und seine Bibliotheken stammen aus der Umgebung; das Programm läuft auf dem NAS selbst. Ob es dort alles Nötige findet, klärt der nächste Schritt.

05Mit dem ELF-Inspektor prüfen

Die Registerkarte ELF inspector auf der Seite Toolchains (Entwicklerrolle) liest ein Programm oder eine Bibliothek und die Daten des Loaders des Zielsystems, ohne etwas auszuführen. Sie zeigt, ob dieses NAS oder eine Umgebung alle Anforderungen erfüllt. Wählen Sie den Speicherort der Datei (Build einer App, Projektordner, Umgebung oder für Admins jede Datei auf dem NAS), das Ziel und dann Inspect.

ELF-Inspektor: Projektordner ausgewählt, Path hello/hello, Target This NAS (x86_64), LD_LIBRARY_PATH leer Befunde: auf dem NAS geprüft, x86_64, glibc 2.43, 6 ELF-Dateien gelesen, 0 Fehler, 0 Warnungen; kein Problem: Alle Anforderungen der 6 Dateien sind in den von den Bibliotheken definierten Versionen vorhanden

What it needs stellt das Programm, seine geladenen Bibliotheken und deren Speicherorte mit den benötigten Versionen dar. Hier braucht das C++-Programm libstdc++.so.6 und libc.so.6; dieses NAS besitzt beide mit den angeforderten Versionen.

Anforderungen: hello verbunden mit ld-linux-x86-64.so.2, libc.so.6, libgcc_s.so.1, libm.so.6 und libstdc++.so.6 vom NAS sowie die benötigten Versionen GLIBC_2.34, GLIBCXX_3.4.32 und weitere
  • Eine fehlende Bibliothek, eine von ihr nicht bereitgestellte Version oder eine neuere glibc als auf dem Zielsystem erzeugt einen Befund mit Begründung. Wählen Sie eine Umgebung als Ziel, um dasselbe Programm so zu prüfen, wie es dort laufen würde.
  • Auf dem NAS gibt bvs ldd <file> dasselbe aus, für eine Umgebung bvs ldd --env <name> <file>.
  • Für Programme, die Sie weitergeben, führt der App Builder diese Prüfung für jede Datei jedes Builds aus. Seine Registerkarte Dependencies bietet die Korrekturen an.