2009-09-24 16 views
7

मैं "लिनक्स" पर्यावरण पर "सी/सी ++" अनुप्रयोगों को संकलित करने के लिए "जीसीसी क्रॉस-कंपाइलर" बनाना चाहता हूं लेकिन "विंडोज़" लक्ष्य के लिए।बिल्डिंग जीसीसी क्रॉस कंपाइलर ("लिनक्स" से "विंडोज़" तक)

मैं इस बना दिया है अब तक:

  1. स्थापित "Prerequisites for GCC" पृष्ठ पर सूचीबद्ध जीसीसी के निर्माण के लिए आवश्यक उपकरण और संकुल।

  2. डाउनलोड की आवश्यकता सूत्रों:
    "gcc-core-4.4.1", "gcc-g++-4.4.1", "binutils-2.19.1", "w32api-3.13-mingw32", "mingwrt-3.16-mingw32"

  3. निर्मित इस निर्देशिका पदानुक्रम:
    "$ {गृह}/जीसीसी/"- अंतिम क्रॉस-कंपाइलर
    " $ {HOME}/src/"स्रोतों के लिए
    " $ {HOME}/src/build-binutils/i386-mingw32/"- i386-mingw32" के लिए binutils के निर्माण के लिए लक्ष्य
    "$ {HOME}/Src/निर्माण जीसीसी/i386-mingw32/"- जीसीसी के निर्माण के लिए" i386-mingw32 "लक्ष्य

  4. builded binutils पैकेज:

    सीडी" $ {गृह}/src/निर्माण binutils/i386 -mingw32/"
    ../../binutils-2.19.1/configure उपसर्ग =" $ {गृह}/जीसीसी "--target = i386-mingw32 --disable-NLS

    स्थापित कर बनाने

  5. प्रतिलिपि बनाई गई "w32api" और "mingwrt" स्थापित करने के लिए निर्देशिका हेडर:

    सीपी-आर "$ {HOME} /src/w32api-3.13-mingw32/include" "$ {HOME}/gcc/i386-mingw32"
    सीपी-आर "$ {HOME} /src/mingwrt-3.16- mingw32/"शामिल" $ {गृह}/जीसीसी/i386-mingw32 "


और अब जब मैं निर्माण करने के लिए कोशिश कर रहा हूँ" ग (केवल) पार संकलक ":

cd "${HOME}/src/build-gcc/i386-mingw32/" 
../../gcc-4.4.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --enable-languages=c --with-headers="${HOME}/gcc/i386-mingw32/include" --disable-nls 
make<br> 

यह लगभग 4 मिनट का निर्माण कर रहा था और फिर मुझे ये त्रुटियां देता है:

${HOME}/gcc/i386-mingw32/bin/ld: dllcrt2.o: No such file: No such file or directory 
collect2: ld returned 1 exit status 
make[2]: *** [libgcc_s.dll] Error 1 
make[2]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32/i386-mingw32/libgcc' 
make[1]: *** [all-target-libgcc] Error 2 
make[1]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32' 
make: *** [all] Error 2 

उस त्रुटि संदेश से मैं वास्तव में नहीं जानता कि अब क्या करना है: - ((।


क्या कोई जानता है कि समस्या कहां है?
धन्यवाद।

उत्तर

11

कि वास्तव में ठीक है: वस्तु फ़ाइलें बनाने के लिए पर्याप्त है, लेकिन लिंक करने के लिए पर्याप्त नहीं: जिस तरह से चीजें जाते हैं, आप

  • हेडर स्थापित
  • निर्माण एक आंशिक सी संकलक

    1. निर्माण binutils करने की जरूरत है
    2. win32api और MinGW क्रम
    3. एक पूरी सी संकलक (और जैसे C अन्य सामने के छोर, निर्माण ++ (जो आपके लापता dllcrt2.o भी शामिल है), फोरट्रान, एडीए, जो कुछ भी है, अगर आप वान का निर्माण टी उन्हें)

    आपने सफल चरण 3 ऊपर सफल किया है; यह libgcc (जो एक जीसीसी समर्थन पुस्तकालय है) बनाने में विफल रहता है, लेकिन इसका मतलब है कि सी कंपाइलर कोर कार्यात्मक है (हालांकि यह लिंक करने में सक्षम नहीं होगा, यह अभी भी वैध ऑब्जेक्ट फाइलें बना सकता है)। आप अपनी जीसीसी बिल्ड निर्देशिका में gcc/xgcc फ़ाइल को देखकर देख सकते हैं।

    तो, आपको अपनी वर्तमान विफलता के बारे में चिंता न करने के बाद, अगले चरण में जाना होगा।

    (आंशिक सी संकलक स्थापित दरअसल के लिए, आपको -k विकल्प के साथ make चलाना चाहिए, यह पूरी कोशिश करने के लिए, यहां तक ​​कि त्रुटियों का सामना करने में। उदाहरण के लिए, make -k install का उपयोग करें।)

  • +0

    आपकी टिप्पणी के लिए बहुत बहुत धन्यवाद: "आपने सफलतापूर्वक उपरोक्त चरण 3 का प्रदर्शन किया है"। मैंने सोचा कि अगर मुझे कोई त्रुटि मिलती है तो मैं अगले चरण में नहीं जा सकता, लेकिन (सौभाग्य से) मैं गलत था। इसके बाद मैंने सफलतापूर्वक Win32api संकलित किया, लेकिन जब मैंने mingwrt संकलित करने का प्रयास किया तो मुझे कुछ त्रुटियां मिलीं - कुछ "थ्रेडिंग" के साथ गलत था। इसलिए मैंने इन पैरामीटरों के साथ जीसीसी संकलित करने का निर्णय लिया: --prefix = "$ {HOME}/gcc" --target = i386-mingw32 --program-prefix = i386-mingw32 --enable-languages ​​= c, C++ --with -हेडर = "$ {HOME}/gcc/i386-mingw32/शामिल करें" --disable-nls --disable-threads - अक्षम-साझा - अक्षम-libssp। और यह काम किया !!! – Petike

    +0

    मुझे पिछली टिप्पणी से थोड़ी गलती के लिए खेद है: समस्या "साझा" विकल्प में थी और "थ्रेड" विकल्प के साथ नहीं। तो यह निर्दिष्ट "--disable-threads" के बिना भी संकलित। – Petike

    +0

    धागे के संबंध में, यदि आपके पास pthreads-win32 लाइब्रेरी स्थापित है तो आप '--enable-libgomp' (ओपनएमपी के लिए) के साथ जीसीसी भी बना सकते हैं। –

    0

    मैंने मिनजीडब्ल्यू स्रोतों के माध्यम से grepped, और पाया कि dllcrt2.o mingwrt पैकेज से कुछ बनाया गया है। मुझे लगता है कि आपको संकलन और स्थापित करना है, न केवल हेडर की प्रतिलिपि बनाएँ?

    +0

    हां, हां। शीर्षलेखों की प्रतिलिपि बनाना कई चरणों में से एक है। मेरी पोस्ट में 5 वें चरण के बाद मुझे यह करना चाहिए: -6। "सी (केवल) क्रॉस-कंपाइलर बनाएं"। -7। केवल संकलित बाइनरी के साथ "पाथ" पर्यावरण परिवर्तक के साथ स्थान जोड़ें। -8। "Win32api" बनाएं। -9। "Mingwrt" बनाएँ। -10। "सी और सी ++ क्रॉस-कंपाइलर" बनाएं। लेकिन अभी के लिए मैं सिर्फ 6 वें चरण में हूं और वह त्रुटि प्राप्त कर रहा हूं। – Petike

    +0

    हमम ... स्वयं MingW के साथ खिलौना नहीं किया है। लेकिन जब मैंने प्रथम चरण क्रॉस-कंपाइलर स्थापित किया, तो मैं कॉन्फ़िगरेशन लाइन पर "--without-headers" का उपयोग करता हूं ताकि यह कह सके कि यह किसी भी प्रकार की सी लाइब्रेरी या लक्ष्य के लिए रनटाइम पर भरोसा न करें। मुझे नहीं पता कि आप किस प्रकार का अनुसरण कर रहे हैं या कैसे चीजें MinGW के साथ काम करती हैं, लेकिन शायद आप इसे एक शॉट दें। – DevSolar

    1

    वहाँ precompiled कर रहे हैं MinGW-w64 के क्रॉस-कंपाइलर्स उपलब्ध हैं। यह लिनक्स से देशी 32- और 64-बिट विंडोज़ बाइनरी को संकलित करने की अनुमति देता है, http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/

    पर बस दो मिनट का ट्यूटोरियल उपलब्ध है, बस अगर आप इसे स्वयं बनाने की कोशिश करने में बहुत समय व्यतीत नहीं करना चाहते हैं।

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