2010-02-24 19 views
10

मैं लिनक्स, जीसीसी में बूस्ट लाइब्रेरी का उपयोग कर रहा हूं। बूस्ट की स्थापना और निर्माण के बाद, मैंने पाया कि रेगेक्स और थ्रेड का उपयोग करने वाले प्रोग्राम साझा बूस्ट पुस्तकालयों का उपयोग करते हैं। मेरे उद्देश्यों के लिए, मुझे स्थिर लिंकिंग की आवश्यकता है। मैं लिंकिंग प्रकार कैसे बदल सकता हूं? क्या मुझे बूस्ट का पुनर्निर्माण करना चाहिए, या शायद मैं अपनी परियोजनाओं में कुछ स्थिरता को परिभाषित करके या कॉन्फ़िगरेशन फ़ाइलों को बढ़ावा देकर लिंकिंग प्रकार सेट कर सकता हूं?बूस्ट स्थैतिक लिंकिंग

उत्तर

17

बस अपने निर्माण आमंत्रण में -static जोड़ें।

$ cat boost_formatted_time.cpp 
#include <iostream> 
#include <boost/date_time/posix_time/posix_time.hpp> 
#include <boost/date_time/posix_time/posix_time_io.hpp> 

using namespace boost::posix_time; 
using namespace std; 

int main(int argc, char **argv) { 
    time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S"); 
    cout.imbue(locale(cout.getloc(), facet)); 
    cout << second_clock::local_time() << endl; 
} 
$ g++ -o /tmp/bft_dyn boost_formatted_time.cpp -lboost_date_time 
$ g++ -static -o /tmp/bft_stc boost_formatted_time.cpp -lboost_date_time 
$ ls -lh /tmp/bft_* 
-rwxr-xr-x 1 edd edd 216K 2010-02-24 12:34 /tmp/bft_dyn  
-rwxr-xr-x 1 edd edd 1.5M 2010-02-24 12:34 /tmp/bft_stc  
$ /tmp/bft_dyn 
24-Feb-2010 12:34:55 
$ /tmp/bft_stc 
24-Feb-2010 12:34:59 
$ 

नोट कैसे स्थिर द्विआधारी 1.5MB जिन्हें डायनामिक रूप से जुड़ा हुआ संस्करण के लिए 216kb करने का विरोध किया है: यहाँ एक त्वरित उदाहरण सत्र है। डिफ़ॉल्ट बूस्ट पैकेज के साथ डेबियन परीक्षण पर किए गए सभी।

+1

मैं कमांड लाइन से जीसीसी नहीं चलाता, मैं एक्लिप्स सीडीटी का उपयोग कर रहा हूं। संभावित रूप से -स्टैटिक स्विच परियोजना सेटिंग्स से लिंकर को पास किया जा सकता है, मैं इस तरह से खोजने की कोशिश करूंगा। धन्यवाद। –

+0

क्या 'लाइब्रेरी' का सभी पुस्तकालयों पर प्रभाव पड़ता है, जब 1 से अधिक लाइब्रेरी में शामिल होता है? – mrgloom

0

लिंकर को -Lpath/to/library/ निर्दिष्ट करें।

+0

मुझे प्रोजेक्ट बिल्ड और लाइब्रेरी पथ के साथ कोई समस्या नहीं है, मुझे बस लिंकिंग प्रकार को बदलने की आवश्यकता है: डायनामिक से स्थिर तक। –

+6

यह सही नहीं है - आपको '-स्टैटिक' की आवश्यकता है। '-L' लाइब्रेरी का स्थान देता है लेकिन लिंकिंग प्रकार नहीं। पूर्ण सत्र के लिए मेरा उत्तर देखें। –

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