SYSINFO

SYSINFO

Há muito tempo atrás eu escrevi um shell realmente rudimentar e primitivo em C++, e só recentemente descobri o asm.js, então pensei que seria legal tentar compilá-lo e executá-lo em um navegador, mas não posso porque os pacotes apt são incompatíveis. Instalei os pacotes llvm, clang e emscripten e eles estão todos atualizados com o que está nos repositórios. Aqui está meu arquivo de teste hello.c:

#include <stdio.h>


int main(){
    printf("Hello World!\n");
    return 0;
}

Isso compila e funciona perfeitamente clang hello.c && ./a.out, mas quando executo emcc hello.crecebo o erro

/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!

qualfazgenerate a.out.js, mas contém apenas a referência da primeira linha a.out.js.mapcomo SourceMap (o mapa em si contém apenas a linha: {"version":3,"file":"a.out.js","sources":[],"names":[],"mappings":""}. Agora ACHO que isso significa que o llvm não foi compilado com -targets=all, ou pelo menos sem o jsdestino, então tentei construí-lo da fonte, busquei os pacotes mais recentes, seguindo meticulosamente as etapas descritas.aquieaqui, e ambos os pacotes foram compilados com sucesso. No entanto, quando executado assim, o emiscript reclamou que 'esperava 3.4', mas obteve '(tags/RELEASE_380/final)' para as informações da versão e subsequentemente falhou. Só por segurança, eu limpei emscripten, llvm e clang antes de iniciar a compilação do código-fonte, e espero que 3.4 seja omínimoversão, não asuportado apenasversão, porque a versão mais recente é 3.9, eu acredito, e os documentos não disseram para levar nenhuma consideração especial. De qualquer forma, tentei compilar o 3.4 a partir do código-fonte, mas aparentemente ele não reconhece 'js' como um destino válido (tentei compilar sem isso e executá-lo mesmo assim: sem dados). É bizarro para mim que o emscriptenapt-package não extraia o clang/llvm compilado corretamente como uma dependência, então talvez esteja fazendo a invocação errada? Os documentos dizem que eu deveria ser capaz de fazer o que estou fazendo, mas sou novo no clang/emscripten, então talvez eu tenha que configurar o ambiente clang primeiro ou, alternativamente, vincular algo explicitamente?

SYSINFO

Versão e informações do clang/clang++ (de clang --version):

clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: i686-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

Versão e informações do llvm (de 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

versão emscripten (de emcc --version): 1.22.1

conteúdo gerado mais recentemente ~/.emscripten_sanity:1.22.1|le32-unknown-nacl|/usr/bin|(tags/RELEASE_380/final)

colar dos gerados mais recentemente~/.emscsripten

informações do kernel (de uname -srpmio):Linux 4.4.0-21-generic i686 i686 i686 GNU/Linux

O sistema é uma VM VirtualBox com extensões instaladas, executando Linux Mint 18 "Sarah" Cinnamon como uma máquina de 32 bits com 2 núcleos de CPU, 4 GB de RAM, 512 MB de memória de vídeo e imagem de disco virtual de aproximadamente 50 GB. Nenhum outro sistema operacional está presente, basicamente uma instalação simples. Atualmente possui as versões padrão do clang, llvm e emscripten disponibilizadas pelos repositórios apt.

informação relacionada