2015-08-02 10 views
19

मैं जंग के साथ स्थैतिक निष्पादन योग्य बनाने की कोशिश कर रहा हूं। मैं किसी विशेष लाइब्रेरी को स्थिर रूप से लिंक करने का प्रयास नहीं कर रहा हूं, मैं एक निष्पादन योग्य बनाने की कोशिश कर रहा हूं जो सभी पर डायनामिक लिंकिंग का उपयोग नहीं करता है।स्थिर रूप से जुड़े निष्पादन योग्य कैसे उत्पन्न करें?

$ cat hello.rs 
fn main() 
    { 
    print!("Hello, world!\n"); 
    } 
$ rustc hello.rs -o hello 
$ file hello 
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, [etc] 

नोट dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2: मैं निम्नलिखित (अन्यथा काम) परीक्षण किया है। स्टेटिक एक्जिक्यूटिव्स के बजाय statically linked है। (और मेरे मामले corrupted section header size में, हालांकि मुझे सुखद चकित अगर मैं कि को दोहराने के लिए जंग समझा सकते हो जाएगा।)

क्या विकल्प मैं स्थूलता के लिए rustc को पारित करने के लिए यह एक वास्तविक स्थिर निष्पादन उत्पन्न करने के लिए प्राप्त करने के लिए (की आवश्यकता है : एक जो भी file सहमत है सांख्यिकीय रूप से जुड़ा हुआ है)।

+0

शायद -सी लिंक-आर्ग = '...' विकल्प आप मदद कर सकते हैं? – llogiq

+0

ध्यान दें कि आपका प्रश्न केवल लिनक्स से संबंधित है - AFAIK, [आप ओएस एक्स पर निष्पादन योग्य रूप से लिंक नहीं कर सकते] [https://developer.apple.com/library/mac/qa/qa1118/_index.html)। मैं विंडोज के बारे में निश्चित नहीं हूँ। – Shepmaster

+3

आप ग्लिब विह जंग के बजाय musl का उपयोग करना चाहेंगे [https://github.com/rust-lang/rust/pull/24777) –

उत्तर

14

जंग स्थिर रूप से ग्लिब (और libgcc, iirc) के अलावा सब कुछ लिंक करता है।

यदि आप 100% स्थिर रूप से जुड़ी बाइनरी प्राप्त करना चाहते हैं, तो आप 1.1 के साथ एमयूएसएल का उपयोग कर सकते हैं। https://github.com/rust-lang/rust/pull/24777 प्रारंभिक समर्थन है, हम आशा करते हैं कि भविष्य में इसका उपयोग करना अधिक आसान हो जाएगा।

4

मेरे उपयोग के मामले यह है, मैं खिड़कियों पर यह बहुत ही सामान्य स्थिति से बचना चाहते हैं:

कार्यक्रम शुरू नहीं कर सकते क्योंकि VCRUNTIME140.dll अपने कंप्यूटर से लापता है। इस समस्या को ठीक करने के लिए प्रोग्राम को पुनर्स्थापित करने का प्रयास करें।

यह समाधान काम करता है, लेकिन वर्तमान में केवल रात (2017/06/06) पर। (प्रयोग उचित लक्ष्य ट्रिपल अपने मंच के लिए) अपने .cargo/config फाइल करने के लिए इस जोड़ें: संपादन कार्गो config को

[target.x86_64-pc-windows-msvc] 
rustflags = ["-C", "target-feature=+crt-static"] 

एक वैकल्पिक हाथ से rustc को -C target-feature=+crt-static पारित करने के लिए है।

आरएफसी: https://github.com/rust-lang/rfcs/blob/master/text/1721-crt-static.md

पुल अनुरोध: https://github.com/rust-lang/rust/pull/37545

कार्गो config: http://doc.crates.io/config.html

संबंधित मुद्दे