Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

514
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!