es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo vincular wasi-libc con la bandera de memoria compartida?

Quiero importar memoria compartida en mi módulo WASM e intentando enlazar mis archivos objeto, todos compilados con -matomics y -mbulk-memory, y las bibliotecas wasi-libc -lc, lc++ y -lc++abi. Pero me sale un error:

wasm-ld: error: –shared-memory está prohibido por errno.o porque no se compiló con características de ‘atomics’ o ‘bulk-memory’.

Entiendo que wasm-ld enlaza algunos archivos objeto de libc, compilados sin las banderas anteriores, por lo que no se pueden enlazar. ¿Cómo puedo proporcionar estas banderas al enlazador? ¿O necesito construir wasi-libc desde la fuente con estas banderas?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para proporcionar los indicadores “-matomics” y “-mbulk-memory” al enlazador, puede agregarlos a la variable de entorno LDFLAGS antes de ejecutar el comando de enlazador. Por ejemplo, si su comando de enlazador es:

    wasm-ld -o mymodule.wasm obj1.o obj2.o
    

    Puede agregar los indicadores de esta manera:

    LDFLAGS="-matomics -mbulk-memory" wasm-ld -o mymodule.wasm obj1.o obj2.o
    

    Si necesita compilar wasi-libc desde la fuente con estos indicadores, puede seguir las instrucciones en la documentación de wasi-libc para compilar con opciones personalizadas. En resumen, puede establecer la variable de entorno “WASI_SDK_PREFIX” en la ruta de su SDK WASI instalado, y luego ejecutar los siguientes comandos:

    git clone https://github.com/WebAssembly/wasi-libc.git
    cd wasi-libc
    make WASI_SDK_PREFIX=$WASI_SDK_PREFIX WASM_CC=path/to/clang WASM_AR=path/to/llvm-ar WASM_NM=path/to/llvm-nm WASM_RANLIB=path/to/llvm-ranlib CFLAGS="-O3 -fPIC -matomics -mbulk-memory"
    make install
    

    Esto construirá e instalará wasi-libc con los indicadores “-matomics” y “-mbulk-memory”. Luego, puede vincular sus archivos de objeto utilizando el comando “wasm-ld” con la opción “-lc” para vincular con la nueva biblioteca libc:

    wasm-ld -o mymodule.wasm obj1.o obj2.o -lc
    

Comments are closed.