Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

515
Visualizações
¿Cuál es el propósito de las funciones ccall y cwarp en Emscripten?

Estoy siguiendo las instrucciones de la documentación de Emscripten aquí y quiero practicar con ejemplos mínimos. Mi objetivo final es crear una biblioteca de C++, compilarla en un solo archivo binario wasm y luego usar estos métodos compilados en una aplicación web de interfaz pura.

No entiendo cuál es el propósito de llamar a los métodos de C ++ con "ccall" cuando puede crearlos directamente desde "Módulo". Por ejemplo, puedo usar Module._doubleNumber(9); , que es más corto que Module.ccall('doubleNumber','number', ['number'], [9]); .

¿Cuál es la diferencia entre llamar a uno u otro?

Aquí está el código completo:

 extern "C" { int doubleNumber( int x ) { int res = 2*x; return res; } }

Compilado con

 emcc main.cpp -o main.js -sEXPORTED_FUNCTIONS=_doubleNumber -sEXPORTED_RUNTIME_METHODS=ccall

Estoy usando un documento html simple para probar los resultados:

 <html> <head> <meta charset="utf-8"> <title>WASM Demo</title> </head> <body> <script type="text/javascript" src="main.js"></script> <script type="text/javascript"> Module.ccall('doubleNumber','number', ['number'], [9]); // 18 Module._doubleNumber(9); // 18 </script> </body> </html>
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No hay diferencia en tal el pequeño ejemplo. Puede haber problemas en proyectos grandes.

  1. Menos importante. Module.ccall puede realizar una llamada asíncrona con el parámetro async=true , mientras que la llamada a la función exportada Module._doubleNumber siempre está sincronizada.
  2. Más importante. En niveles de optimización más altos (-O2 y superiores), el compilador de cierre ejecuta y minimiza (cambia) los nombres de las funciones. Un nombre minimizado para _doubleNumber se cambiará a otro nombre, generalmente impredecible, y Module._doubleNumber no estará definido.
  3. -sEXPORTED_FUNCTIONS=_doubleNumber evita la minimización de nombres y se puede usar para bibliotecas pequeñas de C. Una gran biblioteca C requeriría una tonelada de elementos enumerados en EXPORTED_FUNCTIONS , y deberá tener en cuenta la longitud limitada de la línea de comando.
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda