Rust: ERROR_ON_UNDEFINED_SYMBOLS = 1 تم تمريره دائمًا لـ emcc بشكل فعال يمنع أي ارتباط ديناميكي

تم إنشاؤها على ٤ مايو ٢٠١٧  ·  1تعليق  ·  مصدر: rust-lang/rust

فشل كود الصدأ التالي في التحويل البرمجي باستخدام هدف wasm32-unknown-emscripten

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

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

مع

  error: unresolved symbol: log_event

صححني إذا كنت مخطئًا ، فقد أكون مخطئًا جدًا في هذا ، لكن #[link] بدون kind=static يتضمن ارتباطًا ديناميكيًا ، ويجب ألا تفشل الشفرة أعلاه في التجميع؟

بالنسبة إلى emscripten نفسه ، فليس لديه مشكلة في تجميع كود C مثل هذا:

extern void log_event(void* ptr);

int main() {
    log_event(0);
}

بـ emcc <source above.c> -O3 -s WASM=1 -s SIDE_MODULE=1 -o result.wasm
إنتاج إدخال استيراد جميل في النتيجة

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

إذن ، السؤال هو ، هل هناك أي خيار لوجود رموز ديناميكية في الشكل الناتج؟ أو على الأقل تجاوز هذا الرابط ERROR_ON_UNDEFINED_SYMBOLS وسيطة في مرحلة ما؟

سيكون ارتباط المصدر:
https://github.com/rust-lang/rust/blob/ec27aa97b921957711b96e578c7c197ff28553ac/src/librustc_back/target/wasm32_unknown_emscripten.rs#L21

C-bug O-asmjs O-wasm

التعليق الأكثر فائدة

NikVolf في الواقع يمكنك تجاوز وسيطات emcc بمساعدة متغير البيئة EMMAKEN_CFLAGS .
(بافتراض أن اسم الملف هو main.rs )

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

>كل التعليقات

NikVolf في الواقع يمكنك تجاوز وسيطات emcc بمساعدة متغير البيئة EMMAKEN_CFLAGS .
(بافتراض أن اسم الملف هو main.rs )

export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" 
rustc --target=wasm32-unknown-emscripten main.rs
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات