Rust: ERROR_ON_UNDEFINED_SYMBOLS=1 selalu diteruskan untuk emcc secara efektif mencegah penautan dinamis apa pun

Dibuat pada 4 Mei 2017  ·  1Komentar  ·  Sumber: rust-lang/rust

kode karat berikut gagal dikompilasi menggunakan target wasm32-unknown-emscripten

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

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

dengan

  error: unresolved symbol: log_event

perbaiki saya jika saya salah, saya mungkin salah besar dengan ini, tetapi #[link] tanpa kind=static menyiratkan tautan dinamis, dan kode di atas tidak boleh gagal dikompilasi?

Sedangkan untuk emscripten sendiri, tidak ada masalah mengkompilasi kode C seperti ini:

extern void log_event(void* ptr);

int main() {
    log_event(0);
}

dengan emcc <source above.c> -O3 -s WASM=1 -s SIDE_MODULE=1 -o result.wasm
menghasilkan entri impor yang bagus di result.wasm

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

Jadi, pertanyaannya adalah, apakah ada opsi untuk memiliki simbol dinamis dalam wasm yang dihasilkan? Atau setidaknya timpa argumen tautan ERROR_ON_UNDEFINED_SYMBOLS di beberapa titik?

tautan sumber akan menjadi:
https://github.com/rust-lang/rust/blob/ec27aa97b921957711b96e578c7c197ff28553ac/src/librustc_back/target/wasm32_unknown_emscripten.rs#L21

C-bug O-asmjs O-wasm

Komentar yang paling membantu

@NikVolf sebenarnya Anda dapat mengganti argumen emcc dengan bantuan variabel lingkungan EMMAKEN_CFLAGS .
(dengan asumsi nama file Anda adalah main.rs )

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

>Semua komentar

@NikVolf sebenarnya Anda dapat mengganti argumen emcc dengan bantuan variabel lingkungan EMMAKEN_CFLAGS .
(dengan asumsi nama file Anda adalah main.rs )

export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" 
rustc --target=wasm32-unknown-emscripten main.rs
Apakah halaman ini membantu?
0 / 5 - 0 peringkat