2009-09-09 11 views
13

मैंने अपने होमपेज "www.boost.org" से "बूस्ट" (1.40.0) स्रोत कोड डाउनलोड किया है। मेरे पास लिनक्स (उबंटू 9.04 जौन्टी) स्थापित है और मेरे "LINUX" मशीन से "विन्डोज़" संस्करण (जैसे ".dll", NOT ".so") में बूस्ट लाइब्रेरी को संकलित करने का प्रयास कर रहा है।बूस्ट - क्रॉस संकलन - "लिनक्स से" "विंडोज़"

और अब एक महत्वपूर्ण सवाल:

आईटी संभव "Windows" बूस्ट पुस्तकालयों के लिए से "लिनक्स" संकलित करने के लिए है (किसी का कहना है कि यदि "हाँ" मैं उस पर भरोसा तभी कार्य करेंगे वह पहले से ही यह किया है इससे पहले यहां एक समाधान लिखेंगे जो मेरे लिए काम करेगा। उस निराशा के लिए खेद है, लेकिन मैं इसे 3 दिनों के लिए करने की कोशिश कर रहा हूं और अब तक कुछ भी सकारात्मक नहीं है) ?

अभी तक मैंने इस तरह से C++ प्रोग्राम संकलित किए हैं। लिनक्स से लिनक्स में संकलन के लिए मैंने "gcc" (या "g ++") कंपाइलर का उपयोग किया है। लिनक्स से विंडोज तक संकलन के लिए मैंने "i586-mingw32msvc-gcc" (या "i568-mingw32msvc-g ++") कंपाइलर (उदाहरण के लिए "उबंटू" के लिए "mingw32" पैकेज में निहित है) का उपयोग किया है।

--1:

तो यह रणनीति मैं भी उपयोग करने के लिए बढ़ावा पुस्तकालयों संकलित करने के लिए चाहते थे और मैं (बढ़ावा मुखपृष्ठ पर "प्रारंभ करना" लेख को पढ़ने के बाद) इस की कोशिश की है अब तक। मैंने "रूट" बूस्ट सोर्स कोड निर्देशिका से "bootstrap.sh" चलाया है:

./bootstrap.sh 

- 2। तब मैं ("जीसीसी का उपयोग कर," से) फ़ाइल "परियोजना config.jam" में एक बात बदल गए हैं:

using gcc : : i586-mingw32msvc-gcc ; 

--3। और अंत में चलाने "bjam" निष्पादन:

./bjam stage 

लेकिन बढ़ावा पुस्तकालयों में से "विंडोज" संस्करण के निर्माण के बजाय मैं त्रुटि में बहुत से संदेश मिला है।

क्या कोई मेरी मदद कर सकता है?

अग्रिम धन्यवाद।

Petike

+4

ठीक है, मैं काट दूंगा: फिर भी आप पृथ्वी पर ऐसा क्यों करना चाहेंगे? विंडोज़ पर विंडोज़ के लिए मजबूती क्यों नहीं बढ़ाएं? – sbi

+13

@ एसबीआई, क्यों नहीं? क्या होगा यदि विंडोज उपलब्ध नहीं है। क्या होगा यदि आप इसे बर्दाश्त नहीं कर सकते हैं? क्या होगा यदि आपको एक मंच से विभिन्न प्लेटफार्मों के लिए संकलन की सुविधा की आवश्यकता है। –

उत्तर

0

बूस्ट अपने ओएस और वर्तमान अपने वर्तमान प्रणाली के आधार पर निर्माण के बारे में मान्यताओं बनाता है। क्या होगा यदि आप Win32 शीर्षलेख फ़ाइलों को रोकना चाहते हैं, तो पथ शामिल करने से सभी लिनक्स शीर्षलेख हटाएं, और फिर निर्माण करने का प्रयास करें?

0

यह वास्तव में एक उत्तर नहीं है, लेकिन: नहीं!

एक पूरी तरह से अलग मंच पर संकलन क्रॉस आमतौर पर **** में एक बड़ा दर्द है।

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

फिर आप अपने निर्माण के साथ वीएम आदि पर स्वचालित परीक्षण भी चला सकते हैं, जो एक बड़ा फायदा होना चाहिए।

+3

यह स्वीकार्य नहीं है –

+3

वैसे यह काम करता है। "स्वीकार्य" या नहीं। – AndreasT

+2

स्वचालित परीक्षण चलाने में सक्षम होने के बारे में अच्छा बिंदु, यह ऐसा कुछ है जो क्रॉस-संकलित वातावरण में नहीं किया जा सकता है। – Malvineous

10

आधिकारिक दस्तावेज़ीकरण में cross compilation पर एक अनुभाग है।तुलना कि तुम क्या कर रहे साथ, वहाँ दो मुद्दे हैं:

  1. आप i586-mingw32msvc-जीसीसी निर्दिष्ट और निर्दिष्ट करना चाहिए i586-mingw32msvc-जी ++। पूर्व एक सी संकलक, जो थोड़ा मुश्किल सी संकलित करने के लिए ++ codebase ;-)

  2. उपयोग करने के लिए आप को लक्षित-os जरूरत = खिड़कियों

ध्यान रखें कि एक ज्ञात बग है कि है - जब स्थिर पुस्तकालयों को बनाते हुए, वे रैनलिब के माध्यम से पारित नहीं होते हैं, और मिंगव लिंकर विशेष रूप से इस बारे में परेशान हैं। यदि आप स्थिर पुस्तकालयों का उपयोग करने की योजना बनाते हैं तो आपको मैन्युअल रूप से रैनलिब चलाने होंगे।

+0

मैंने इसे "i586-mingw32msvc-g ++" और "target-os = windows" के साथ करने की कोशिश की लेकिन कुछ भी नहीं बनाया गया है और मुझे त्रुटियों की अगली 20 पंक्तियां मिली हैं। ऐसा लगता है कि मुझे "विंडोज" (या कोई अन्य समाधान?) से पुस्तकालयों का निर्माण करना होगा। – Petike

+1

मुझे जो कुछ भी ठीक से किया गया है उसे नीचे खींचने की कोशिश करें। मेरे पास एसवीएन हेड या बूस्ट है, और मेरे पास यह मेरे उपयोगकर्ता-config.jam में है: "जीसीसी का उपयोग करना: m586-mingw32msvc-g ++;"। मैं फिर चलाता हूं: "bjam toolset = gcc-m target-os = windows variant = debug --with-program_options"। मैं आदेश चलाता हूं, और अंत में, चरण/lib/libboost_program_options.lib बनाया गया है। क्या आप वही करने की कोशिश कर सकते हैं? यदि यह काम करता है, तो कृपया अपने उपयोग पर प्राप्त त्रुटियों को प्रदान करें। यदि यह काम नहीं करता है, तो त्रुटियां भी प्रदान करें। मुझे लगता है कि त्रुटियां एसओ पर फिट नहीं होंगी, इसलिए http://codepad.org –

+3

का उपयोग करें यह अंत में मेरे लिए काम करता है। मैं गलत था, मैंने केवल "थ्रेड" लाइब्रेरी को संकलित करने की कोशिश की है, न कि "सब"। और थ्रेड संकलित नहीं किया जा सका क्योंकि इसे "pthreads" नहीं मिला। मैंने केवल जोड़ा: "थ्रेडपी = win32" और उसके बाद यह ठीक था। तो पूरा आदेश है: "./bjam --layout = system variant = रिलीज थ्रेडिंग = बहु लिंक = साझा रनटाइम-लिंक = साझा टूलसेट = gcc target-os = windows threadapi = win32 चरण"। लेकिन मैं अभी भी इन पुस्तकालयों संकलन नहीं कर सकते हैं: -graph -graph_parallel -math (आंशिक रूप से) -python दूसरों संकलित किया जा सकता -iostreams। – Petike

3

यहाँ खिड़कियों के linux से पार निर्माण को बढ़ावा देने के लिए पालन करने के लिए एक बहुत ही सरल प्रक्रिया है:

https://web.archive.org/web/20110604002004/http://www.vle-project.org/wiki/Cross_compilation_Win32

+0

बहुत अच्छा, यह अभी भी काम कर रहा है (कम से कम यह त्रुटियों के बिना बनाता है, इसे चलाने की कोशिश नहीं की है)! – Luminger

+0

+1 यह मेरे लिए भी काम करता है! –

+2

ऐसा लगता है कि उबंटू 12.04 पर 1.48.0 के मुकाबले मेरे लिए काम किया है। Elthariel, लिंक के बावजूद, उस लिंक की सामग्री को शामिल करने के लिए आपके उत्तर का विस्तार करना आपके लिए एक अच्छा विचार हो सकता है। यदि आप करते हैं तो मैं आपको उखाड़ दूंगा। –

2

यह आदेशों मैं का उपयोग करें। मैंने उन्हें 1.46 और 1.4 9 को बढ़ावा देने के लिए परीक्षण किया है।

प्रारंभ करने के लिए,/usr/i686-w64-mingw32/bin के अंदर कंपाइलर के लिंक बनाएं। आप इस स्क्रिप्ट को चला सकते हैं:

#!/bin/bash 

binDir="/usr/bin" 
destDir="/usr/i686-w64-mingw32/bin" 

cd "$binDir" 
mkdir -p "$destDir" 

for name in $(ls i686-w64-mingw32*); do 
    newName=$(echo "$name" | sed 's/i686-w64-mingw32-//g') 
    if [ -f "$destDir/$newName" ]; then 
     rm "$destDir/$newName" 
    fi 
    ln -s "$binDir/$name" "$destDir/$newName" 
done 

फिर, bjam इंस्टॉल करें। ubuntu/डेबियन, यह पैकेज "libboost1.48-देव"

apt-get install libboost1.48-dev 

, समाप्त करने के लिए हो जाते हैं जड़ और चलाने में शामिल है पर

env PATH=/usr/i686-w64-mingw32/bin:$PATH bjam toolset=gcc target-os=windows variant=release threading=multi threadapi=win32 link=static --prefix=/usr/i686-w64-mingw32 -j 4 --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged install 

हो गया!

+0

क्या करना है मुझे पता है कि आपके उत्तर के बाद से यह दो साल हो गया है, लेकिन: यह 'ऑटोरेगेक्स' आप किस बारे में बात करते हैं? क्यों नहीं "sed 's/i686-w64-mingw32 - // g'"? –

+0

यह एक कंप्यूटर है जो मेरे कंप्यूटर में मौजूद है, जो सिर्फ एक sed है। मैंने आपके सुझाव के अनुसार अपना जवाब संशोधित किया। – Congelli501

+0

मुझे निम्न त्रुटि मिलती है: अमान्य संपत्ति ' win32': अज्ञात सुविधा 'थ्रेडपी'। बूस्ट लाइब्रेरी हालांकि थोड़ा नया संस्करण है। –

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