मैं emcc -O3 -s WASM=1 -s SIDE_MODULE=1 -o sum.wasm sum.c
चलाकर निम्नलिखित सी कोड से काफी कम (203 बाइट्स) wasm फ़ाइल उत्पन्न कर सकता हूं।मैं जंग के साथ एक न्यूनतम wasm फ़ाइल कैसे उत्पन्न करूं?
#include <emscripten/emscripten.h>
int EMSCRIPTEN_KEEPALIVE sum(int a, int b) {
return a + b;
}
disassembled उत्पादन:
(module
(type $0 (func (param i32 i32) (result i32)))
... trim 9 lines ...
(export "_sum" (func $0))
(func $0 (type $0) (param $var$0 i32) (param $var$1 i32) (result i32)
(i32.add
(get_local $var$1)
(get_local $var$0)
)
)
... trim 17 lines ...
)
लेकिन निम्नलिखित जंग कोड
pub fn main() {}
#[no_mangle]
pub extern fn sum(a: i32, b: i32) -> i32 {
a + b
}
मैं इसी तरह कुछ भी उत्पादन नहीं कर पा रहे दिए गए।
rustc -O --target=wasm32-unknown-emscripten sum.rs
काम करता है लेकिन मुझे 85k wasm फ़ाइल और 128k जेएस फ़ाइल देता है।
मैं EMMAKEN_CFLAGS='-s WASM=1 -s SIDE_MODULE=1'
निर्यात की कोशिश की है लेकिन यह है कि मेरे जैसे
इनपुट फ़ाइल चेतावनी के एक नंबर देता है "/tmp/.../rust.metadata.bin" मौजूद है, लेकिन एक LLVM bitcode उपयुक्त फ़ाइल नहीं थी Emscripten के लिए। शायद गलती से देशी निर्मित ऑब्जेक्ट फ़ाइलों को Emscripten के साथ मिलाकर?
और फिर लिंक करने में विफल रहता है।
मेरा जंग संस्करण 1.22.0-nightly (c6884b12d 2017-09-30)
है और मेरा एमसीसी संस्करण 1.37.21
है।
मैं क्या गलत कर रहा हूं?
हा, खोज के लिए एक सप्ताह और मैं कुछ भी नहीं पाते:
इस लक्ष्य setup guide में वर्णित के रूप में इस्तेमाल किया जा सकता है। फिर इस प्रश्न को पोस्ट करने के कुछ मिनट बाद मुझे यह [https://gist.github.com/LukasKalbertodt/821ab8b85a25f4c54544cc43bed2c39f) मिलता है जो इसका उत्तर दे सकता है। एक बार जब मैं इसका परीक्षण करता हूं तो वापस रिपोर्ट करूंगा। – zakm
[इस फ़ाइल में] [https://github.com/rust-lang/rust/blob/0defa208dcb5a0f3c1ca5bc4df7acf52759ece44/src/librustc_back/target/wasm32_unknown_emscripten.rs) जंग के ईएमएसस्क्रिप्ट लक्ष्य के बारे में बहुत कुछ सब कुछ परिभाषित किया गया है। और [यहां] (https://github.com/rust-lang/rust/blob/b2f67c8d5676d13d83523316ac95a7056dbd19c6/src/librustc_back/target/mod.rs), टिप्पणी कहती है कि कोई JSON फ़ाइल लिखकर लक्ष्य जोड़ सकता है (बिना किसी संकलन के rustc!)। इसलिए आप उस कस्टम लक्ष्य को जोड़ने का प्रयास कर सकते हैं जो 'SIDE_MODULE' ध्वज को एमसीसी में पास करता है। मैं एक उचित उत्तर लिखूंगा, लेकिन मेरे पास अभी समय नहीं है। क्षमा करें: < –