Rust: ERROR_ON_UNDEFINED_SYMBOLS = 1 sempre passado para emcc impede efetivamente qualquer link dinâmico

Criado em 4 mai. 2017  ·  1Comentário  ·  Fonte: rust-lang/rust

o seguinte código de ferrugem não consegue compilar usando o destino wasm32-unknown-emscripten

extern {
  #[link(name="env")]
  fn log_event(id: *const u8);
}

fn main() {
    unsafe { log_event(::std::ptr::null()); }
}

com

  error: unresolved symbol: log_event

corrija-me se eu estiver errado, posso estar terrivelmente errado com isso, mas #[link] sem kind=static implica link dinâmico e o código acima não deve falhar ao compilar?

Quanto ao emscripten em si, ele não tem nenhum problema em compilar o código C assim:

extern void log_event(void* ptr);

int main() {
    log_event(0);
}

com emcc <source above.c> -O3 -s WASM=1 -s SIDE_MODULE=1 -o result.wasm
produzindo uma boa entrada de importação no result.wasm

  (import "env" "_log_event" (func (;0;) (type 0)))

Portanto, a questão é: há alguma opção de ter símbolos dinâmicos no wasm resultante? Ou pelo menos substituir este argumento do vinculador ERROR_ON_UNDEFINED_SYMBOLS em algum ponto?

o link de origem seria:
https://github.com/rust-lang/rust/blob/ec27aa97b921957711b96e578c7c197ff28553ac/src/librustc_back/target/wasm32_unknown_emscripten.rs#L21

C-bug O-asmjs O-wasm

Comentários muito úteis

@NikVolf, na verdade, você pode substituir os argumentos emcc com a ajuda da variável de ambiente EMMAKEN_CFLAGS .
(presumindo que seu nome de arquivo seja main.rs )

export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" 
rustc --target=wasm32-unknown-emscripten main.rs

>Todos os comentários

@NikVolf, na verdade, você pode substituir os argumentos emcc com a ajuda da variável de ambiente EMMAKEN_CFLAGS .
(presumindo que seu nome de arquivo seja main.rs )

export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" 
rustc --target=wasm32-unknown-emscripten main.rs
Esta página foi útil?
0 / 5 - 0 avaliações