
Vor langer Zeit habe ich eine wirklich grobe und primitive Shell in C++ geschrieben und erst kürzlich asm.js entdeckt. Daher dachte ich, es wäre nett, zu versuchen, sie zu kompilieren und in einem Browser auszuführen, aber das geht nicht, weil die apt-Pakete nicht kompatibel sind. Ich habe die Pakete llvm, clang und emscripten installiert und sie sind alle auf dem neuesten Stand im Vergleich zu dem, was in den Repos ist. Hier ist meine Testdatei hello.c
:
#include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
Dies wird kompiliert und läuft problemlos mit clang hello.c && ./a.out
, aber beim Ausführen emcc hello.c
erhalte ich den Fehler
/usr/bin/lli: error creating EE: No available targets are compatible with this triple, see -version for the available targets. FAIL: Running the generated program failed!
welchetutgenerate a.out.js
, aber es enthält nur die erste Zeile mit Verweis auf , da a.out.js.map
es sich um SourceMap handelt (die Map selbst enthält nur die Zeile: {"version":3,"file":"a.out.js","sources":[],"names":[],"mappings":""}
. Nun DENKE ich, dass dies bedeutet, dass das LLVM nicht mit kompiliert wurde -targets=all
oder zumindest ohne das js
Ziel, also habe ich versucht, es aus dem Quellcode zu erstellen. Ich habe die neuesten Pakete abgerufen und dabei die beschriebenen Schritte sorgfältig befolgtHierUndHier, und beide Pakete wurden erfolgreich erstellt. Wenn es jedoch so ausgeführt wird, beschwert sich emiscript, dass es „3.4 erwartet“ hat, aber „(tags/RELEASE_380/final)“ als Versionsinformationen erhält, und schlägt anschließend fehl. Nur um sicherzugehen, habe ich emscripten, llvm und clang vor dem Start des Quellcode-Builds mit apt-purged, und ich würde hoffen, dass 3.4 dieMinimumVersion, nicht dienur unterstütztVersion, weil der neueste Build, glaube ich, 3.9 ist und in den Dokumenten nichts Besonderes erwähnt wurde. Wie auch immer, ich habe versucht, 3.4 aus dem Quellcode zu erstellen, aber anscheinend erkennt es „js“ nicht als gültiges Ziel (ich habe versucht, es ohne das zu erstellen und es trotzdem auszuführen: kein Glück). Es ist mir merkwürdig, dass das emscripten
Apt-Paket das ordnungsgemäß kompilierte Clang/LLVM nicht als Abhängigkeit einbindet, mache ich den Aufruf also vielleicht falsch? In den Dokumenten steht, dass ich einfach tun können sollte, was ich tue, aber ich bin neu bei Clang/Emscripten, also muss ich vielleicht zuerst die Clang-Umgebung einrichten oder alternativ etwas explizit verknüpfen?
SYSINFO
clang/clang++-Version und -Info (von clang --version
):
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: i686-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
llvm-Version und -Info (von lli --version
):
LLVM version 3.8.0
Optimized build.
Built Jul 9 2016 (11:22:59).
Default target: i686-pc-linux-gnu
Host CPU: broadwell
emscripten-Version (ab emcc --version
): 1.22.1
Inhalt der zuletzt generierten ~/.emscripten_sanity
:1.22.1|le32-unknown-nacl|/usr/bin|(tags/RELEASE_380/final)
Einfügen der zuletzt generierten~/.emscsripten
Kernel-Info (von uname -srpmio
):Linux 4.4.0-21-generic i686 i686 i686 GNU/Linux
Das System ist eine VirtualBox-VM mit installierten Erweiterungen, auf der Linux Mint 18 „Sarah“ Cinnamon als 32-Bit-Maschine mit 2 CPU-Kernen, 4 GB RAM, 512 MB Videospeicher und ~50 GB virtuellem Disk-Image läuft. Es sind keine anderen Betriebssysteme vorhanden, im Grunde eine Standardinstallation. Derzeit sind die Standardversionen von clang, llvm und emscripten verfügbar, die von den apt-Repositories bereitgestellt werden.