Rust: ERROR_ON_UNDEFINED_SYMBOLS=1 wird immer für emcc übergeben, verhindert effektiv jegliche dynamische Verlinkung

Erstellt am 4. Mai 2017  ·  1Kommentar  ·  Quelle: rust-lang/rust

Der folgende Rostcode kann mit dem Ziel wasm32-unknown-emscripten nicht kompiliert werden

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

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

mit

  error: unresolved symbol: log_event

Korrigieren Sie mich, wenn ich falsch liege, ich könnte mich damit schrecklich irren, aber #[link] ohne kind=static impliziert dynamisches Verknüpfen, und der obige Code sollte nicht kompiliert werden?

Was emscripten selbst betrifft, so hat es kein Problem, C-Code wie folgt zu kompilieren:

extern void log_event(void* ptr);

int main() {
    log_event(0);
}

mit emcc <source above.c> -O3 -s WASM=1 -s SIDE_MODULE=1 -o result.wasm
Erstellen eines schönen Importeintrags in der result.wasm

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

Die Frage ist also, gibt es eine Möglichkeit, dynamische Symbole im resultierenden Wasm zu verwenden? Oder zumindest dieses Linker-Argument ERROR_ON_UNDEFINED_SYMBOLS irgendwann überschreiben?

Quelllink wäre:
https://github.com/rust-lang/rust/blob/ec27aa97b921957711b96e578c7c197ff28553ac/src/librustc_back/target/wasm32_unknown_emscripten.rs#L21

C-bug O-asmjs O-wasm

Hilfreichster Kommentar

@NikVolf tatsächlich können Sie emcc-Argumente mit Hilfe der Umgebungsvariablen EMMAKEN_CFLAGS überschreiben.
(vorausgesetzt Ihr Dateiname ist main.rs )

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

>Alle Kommentare

@NikVolf tatsächlich können Sie emcc-Argumente mit Hilfe der Umgebungsvariablen EMMAKEN_CFLAGS überschreiben.
(vorausgesetzt Ihr Dateiname ist main.rs )

export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" 
rustc --target=wasm32-unknown-emscripten main.rs
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen