2009-11-20 19 views
11

मैं एक आवेदन जो Boost पर निर्भर करता है का निर्माण करने की कोशिश कर रहा हूँ। तो मैं अपने लिनक्स बॉक्स को बूस्ट 1_41_0 डाउनलोड किया है और निर्देश बूस्ट साइट पर पाया पीछा यूनिक्स, वेरिएंट के लिए http://www.boost.org/doc/libs/1_41_0/more/getting_started/unix-variants.htmlलिनक्स पर बिल्डिंग बूस्ट - पुस्तकालय के नाम

वे मूल रूप से संकेत मिलता है कि मैं ./bjam स्थापित चलाते हैं, जो मैंने किया। निर्माण सफलतापूर्वक पूरा हुआ। हालांकि, लाइब्रेरी नाम उपरोक्त दस्तावेज में वर्णित बूस्ट नामकरण सम्मेलन से मेल नहीं खाते हैं, और जो अनुप्रयोग मैं बनाने की कोशिश कर रहा हूं उसके मेकफ़ाइल में निर्दिष्ट है।

मैंने देखा विकल्प है कि मैं bjam के लिए निर्दिष्ट कर सकते हैं का एक समूह देखते हैं कि और मैं उन के साथ खेलने की कोशिश की, लेकिन कोई फर्क नहीं पड़ता कि क्या होता है मैं इसे बहुत सही पाने के लिए नहीं कर पा रहे। मेरी समझ यह है कि पुस्तकालयों को $ BOOST_ROOT/lib निर्देशिका में जाना चाहिए। यह वह जगह है जहां पुस्तकालयों दिखाई, लेकिन नाम:

libboost_thread.a 
libboost_thread.so 
libboost_thread.so.1.41.0 

मैं उम्मीद थी उन्हें libboost_thread-gcc41-MT-डी-1_41_0 या कुछ इसी तरह नामित किया जाना है।

मैं कोशिश की थी ./bjam --build प्रकार = पूरा --layout = टैग किए गए और मैं देख रहा हूँ:

libboost_thread.a 
libboost_thread-mt.a 
libboost_thread-mt-d.a 
libboost_thread-mt-d.so 
libboost_thread-mt-d.so.1.41.0 
libboost_thread-mt-s.a 
libboost_thread-mt-sd.a 
libboost_thread-mt.so 
libboost_thread-mt.so.1.41.0 
libboost_thread.so 
libboost_thread.so.1.41.0 

तो, मुझे यकीन है कि अगर मैं सिर्फ अपनी -एल निर्देशिका मंच बनाना चाहिए नहीं कर रहा हूँ? क्या कोई दस्तावेज है जो इसे अधिक विस्तार से वर्णित करता है?

उत्तर

7

नाम 1.40.0 में बदल गया था - release notes में देखें:

बिल्ड सिस्टम

यूनिक्स की तरह वातावरण में पुस्तकालयों की डिफ़ॉल्ट नामकरण अब प्रणाली सम्मेलनों से मेल खाता है, और नहीं है विभिन्न सजावट शामिल हैं।

शायद वे बिल्डिंग दस्तावेज़ में इस भाग को अपडेट करना भूल गए हैं।

2

यहाँ दो चर रहे हैं। सबसे पहले "इंस्टॉल" बनाम "चरण" (डिफ़ॉल्ट) है। पुस्तकालयों और शीर्षकों दोनों को एक निर्देशिका में "इंस्टॉल" करें - डिफ़ॉल्ट रूप से/usr/local, और फिर आप स्रोत पेड़ को हटा सकते हैं। "चरण" पुस्तकालयों को "चरण/lib" में रखता है, और आपको "-L/stage/lib -I" झंडे जोड़ना चाहिए।

दूसरा --layout है = संस्करणीकृत और --layout = प्रणाली। ऐसा लगता है जैसे आपने पाया है कि वे पहले से क्या करते हैं, और वास्तव में, सिस्टम 1.40 के बाद से डिफ़ॉल्ट है। प्रारंभ करना मार्गदर्शिका इसका उल्लेख करने में विफल रही है, और मैंने इसे अपडेट करने के लिए एक एक्शन आइटम जोड़ा है। आदर्श रूप से, आपको बूस्ट पुस्तकालयों के सिस्टम नामकरण का उपयोग करने के लिए आवेदन के लेखकों से बात करनी चाहिए। यदि यह संभव नहीं है, तो --layout = संस्करण के साथ निर्माण एकमात्र विकल्प है।

1

बूस्ट प्रलेखन से http://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html#library-naming पर, सम्मेलन है:

-mt थ्रेडिंग टैग: इंगित करता है कि पुस्तकालय multithreading सक्षम समर्थन के साथ बनाया गया था। मल्टीथ्रेडिंग समर्थन के बिना बनाए गए पुस्तकालयों की पहचान -एमटी की अनुपस्थिति से की जा सकती है।

-d एबीआई टैग: अन्य संकलित कोड के साथ लाइब्रेरी की अंतःक्रियाशीलता को प्रभावित करने वाले विवरण एन्कोड करता है।इस तरह प्रत्येक सुविधा के लिए, एक अक्षर वाला टैग में जोड़ा जाता है:

 
Key  Use this library when: 
s linking statically to the C++ standard library and compiler runtime support libraries. 
g using debug versions of the standard and runtime support libraries. 
y using a special debug build of Python. 
d building a debug version of your code. 
p using the STLPort standard library rather than the default one supplied with your compiler. 
n using STLPort's deprecated “native iostreams” feature. 

उदाहरण के लिए, यदि आप स्थिर क्रम पुस्तकालय की डिबग संस्करणों और में STLport मानक लाइब्रेरी के साथ उपयोग के लिए अपने कोड का एक डिबग संस्करण का निर्माण " देशी iostreams "मोड, टैग होगा: -sgdpn। यदि उपर्युक्त में से कोई भी लागू नहीं होता है, तो एबीआई टैग कम हो जाता है।

+1

मल्टीथ्रेडिंग समर्थन के साथ कोई बूस्ट कैसे बनाता है? बूस्ट की [स्थापना] (http://www.boost.org/doc/libs/1_54_0/doc/html/bbv2/installation.html) इसका उल्लेख नहीं करता है। – jww

+2

जब बिल्डिंग को बढ़ावा दें, तो उपयोग करें: ./b2 --build-type = full --layout = versioned यह बहुभाषी वाले प्रत्येक लाइब्रेरी के प्रत्येक संस्करण को उत्पन्न करेगा। – Riot

+1

धन्यवाद दंगा। [अन्य चर्चाओं] से (http://stackoverflow.com/questions/2293962/boost- पुस्तकालय-in-multithreading-aware-mode) स्टैक ओवरफ़्लो पर, ऐसा लगता है कि बूस्ट डिफ़ॉल्ट रूप से बहु-थ्रेडेड है। तो अगर मैं '/ b2' करता हूं, तो मुझे सजावट के बिना बहु-थ्रेडेड मिलता है। क्या यह मामला नहीं है? – jww

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