linux - विंडोज से लिनक्स से एक जंग आवेदन को संकलित करें




windows rust (2)

जड़ वितरण केवल होस्ट सिस्टम के लिए संकलित लाइब्रेरी प्रदान करता है हालांकि, आर्क लिनक्स के विकी पृष्ठ के अनुसार जंग पर , आप विंडोज़ संकुल से संकलित लाइब्रेरी को डाउनलोड निर्देशिका में (प्रतिलिपि बना सकते हैं कि वहाँ i686 और x86-64 संकुल हैं) आपके सिस्टम पर उचित स्थान पर कॉपी कर सकते हैं ( /usr/lib/rustlib या /usr/local/lib/rustlib , जहां जंग स्थापित है के आधार पर), mingw-w64-gcc और शराब स्थापित करें और आप को पार संकलन करने में सक्षम होना चाहिए।

यदि आप कार्गो का उपयोग कर रहे हैं, तो आप कार्गो को कह सकते हैं कि इसे ~/.cargo/config (जहां $ARCH आपके द्वारा उपयोग की गई वास्तुकला है) में जोड़कर ar और लिंकर को देखने के लिए:

[target.$ARCH-pc-windows-gnu]
linker = "/usr/bin/$ARCH-w64-mingw32-gcc"
ar = "/usr/$ARCH-w64-mingw32/bin/ar"

नोट: आपके वितरण के आधार पर सटीक पथ भिन्न हो सकते हैं। अपने वितरण में mingw-w64 पैकेज (जीसीसी और binutils) के लिए फ़ाइलों की सूची जांचें।

तो आप इस तरह से कार्गो का उपयोग कर सकते हैं:

$ # Build
$ cargo build --release --target "$ARCH-pc-windows-gnu"
$ # Run unit tests under wine
$ cargo test --target "$ARCH-pc-windows-gnu"

असल में मैं लिनक्स पर विकसित होने के दौरान विंडोज़ को सरलतम कोड संकलित करने की कोशिश कर रहा हूं।

fn main() {
    println!("Hello, and bye.")
}

मुझे इंटरनेट पर खोज करके ये कमांड मिले हैं:

rustc --target=i686-w64-mingw32-gcc  main.rs
rustc --target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc  main.rs

अफसोस की बात है, उनमें से कोई भी काम नहीं करता है यह मुझे std crate लापता के बारे में एक त्रुटि देता है

$ rustc --target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc  main.rs 

main.rs:1:1: 1:1 error: can't find crate for `std`
main.rs:1 fn main() {
          ^
error: aborting due to previous error

क्या लिनक्स पर कोड को संकलित करने का एक तरीका है जो विंडोज पर चल जाएगा?


आइए, उबंटू से विंडोज़ एक्स 86_64 तक जंग-एसडीएल 2 प्रोजेक्ट के उदाहरणों को क्रॉस कम्पाइल करते हैं

~/.cargo/config

[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"

फिर इसे चलाएं:

sudo apt-get install gcc-mingw-w64-x86-64 -y
# use rustup to add target https://github.com/rust-lang-nursery/rustup.rs
rustup target add x86_64-pc-windows-gnu

# Based on instructions from https://github.com/AngryLawyer/rust-sdl2/

# First we need sdl2 libs
# links to packages https://www.libsdl.org/download-2.0.php

sudo apt-get install libsdl2-dev -y
wget https://www.libsdl.org/release/SDL2-devel-2.0.4-mingw.tar.gz -P /tmp
tar xf /tmp/SDL2-devel-2.0.4-mingw.tar.gz -C /tmp

# Prepare files for building

mkdir -p ~/projects
cd ~/projects
git clone https://github.com/AngryLawyer/rust-sdl2
cp -r /tmp/SDL2-2.0.4/x86_64-w64-mingw32/lib/* ~/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/
cp /tmp/SDL2-2.0.4/x86_64-w64-mingw32/bin/SDL2.dll ~/rust-sdl2/

# Build examples

# we use loop for...in because there is no such feature in cargo to build all examples at once
for i in examples/*; do cargo build --target=x86_64-pc-windows-gnu --verbose --example $(basename $i .rs); done

रन

cargo build target/x86_64-pc-windows-gnu/debug/examples/ में बायनेरिज़ रखेगा target/x86_64-pc-windows-gnu/debug/examples/

आवश्यक फ़ाइलें कॉपी करें:

cp /tmp/SDL2-2.0.4/x86_64-w64-mingw32/bin/SDL2.dll ~/rust-sdl/target/x86_64-pc-windows-gnu/debug/examples/
cp ~/rust-sdl/tests/sine.wav ~/rust-sdl/target/x86_64-pc-windows-gnu/debug/examples/

फिर निर्देशिका को प्रतिलिपि करें ~/rust-sdl/target/x86_64-pc-windows-gnu/debug/examples/ अपनी विन्डोज़ मशीन के लिए और exe फ़ाइलें चलाएं।

सीएमडी.एक्सए में चलें

यदि आप exe फ़ाइलों को चलाने के दौरान कंसोल आउटपुट देखना चाहते हैं, तो आप उन्हें cmd.exe से चला सकते हैं।

फ़ाइल एक्सप्लोरर में वर्तमान निर्देशिका में cmd.exe को खोलने के लिए, विंडो में रिक्त स्थान पर बदलाव के साथ राइट क्लिक करें और Open command window here चुनें।

Mingw के साथ कोई बैकटास नहीं - एमएसवीसी का उपयोग करें

इस बीच अगर आप बैक्रेसेस चाहते हैं और आपको वीसी ++ को स्थापित करने में कोई दिक्कत नहीं है, तो आप हमेशा x86_64-pc-windows-msvc संस्करण का जंग का उपयोग कर सकते हैं।

https://github.com/rust-lang/rust/issues/33985#issuecomment-222826116







cross-compiling