2009-12-10 6 views
7

तो मान लें कि आप बूस्ट "प्रारंभ करना" उदाहरण बनाना चाहते हैं और कमांड लाइन पर निर्माण के बजाय एक्सकोड प्रोजेक्ट का उपयोग करके उनसे लिंक करें। आप हेडर-केवल विकल्प आज़माएं और यह ठीक काम करता है।मैं एक्सकोड का उपयोग करके "प्रारंभ करना" उदाहरण कैसे बढ़ा सकता हूं?

लेकिन तब आप उदाहरण स्रोत ले:

#include <boost/regex.hpp> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string line; 
    boost::regex pat("^Subject: (Re: |Aw:)*(.*)"); 

    while (std::cin) 
    { 
     std::getline(std::cin, line); 
     boost::smatch matches; 
     if (boost::regex_match(line, matches, pat)) 
      std::cout << matches[2] << std::endl; 
    } 
} 

और आप निम्न कार्य करें:

  1. ./bjam
  2. ओपन Xcode स्थापित करने और एक नया सी बनाने का उपयोग कर बढ़ावा पुस्तकालयों का निर्माण ++ कमांड लाइन उपयोगिता परियोजना।
  3. समूह & फ़ाइलें treeview में उत्पाद फ़ोल्डर में खींचें libboost_regex.dylib
  4. परियोजना विकल्प सेट करें ताकि बूस्ट करने के लिए हैडर खोजें पथ अंक फ़ोल्डर
  5. बिल्ड में शामिल हैं (विकल्प है कि यह फाइल कॉपी की अनुमति देता है की जाँच) और परियोजना चलाओ!

दुख की बात है, यदि आप कंसोल खोलकर (भागो | कंसोल) है तो आपको एक त्रुटि देखते हैं कि यह dylib नहीं मिल रहा है करने के लिए जा रहे हैं:

dyld: Library not loaded: libboost_regex.dylib 
    Referenced from: /Users/matt/Documents/Boost/test/GettingStarted/build/Debug/GettingStarted 
    Reason: image not found 

तो, एक बेहतर तरीका नहीं जानने ऐसा करने के लिए एक्सकोड प्राप्त करने के लिए, आप dylib को अपने_प्रोजेक्ट/बिल्ड/डीबग में कॉपी करते हैं/और यह चलता है! हुर्रे!

विस्तार उन्मुख व्यक्ति है कि आप कर रहे हैं, तो आप मानक में में कुछ सामान टाइप इसे आज़माने के लिए:

> Subject: foo bar baz 
> foo bar baz 

और फिर यह segfaults।

Program received signal: “EXC_BAD_ACCESS”. 

एसीके!

लेकिन कोई डर नहीं है। मुझे पता है कि समस्या क्या है! और अगर कोई मुझे इसके लिए धड़कता नहीं है, तो मैं दोपहर के भोजन के बाद समाधान पोस्ट करूंगा।

उत्तर

2

समस्या यह है कि बूस्ट का डिफ़ॉल्ट निर्माण आपके प्रोजेक्ट के डीबग बिल्ड के साथ अच्छा नहीं खेलता है। आप डिबग संस्करण है, जो इस तरह से किया जाता है का उपयोग कर बढ़ावा निर्माण करने के लिए की जरूरत है:

./bjam install variant=debug define=_GLIBCXX_DEBUG --with-regex 

_GLIBCXX_DEBUG वास्तव में Xcode परियोजना है कि संघर्ष खड़ी कर रहा है में विकल्प है।

फिर आप लाइब्रेरी के डीबग संस्करण को अपने डीबग एक्सकोड प्रोजेक्ट से लिंक कर सकते हैं। (मुझे लगता है कि मैकपॉर्ट्स ने पूर्वनिर्धारित बाइनरी का उत्पादन किया है।)

ध्यान रखें कि आप एक ही समय में कई लक्ष्यों को बनाने के लिए bjam संस्करण का उपयोग कर सकते हैं।

इसके अलावा: अगर यह पुनर्निर्माण के बाद काम नहीं करता है, तो यह सुनिश्चित करने के लिए जांचें कि जिस लाइब्रेरी से आप लिंक कर रहे हैं उसका संस्करण वास्तव में आपने अभी बनाया है!

इसके अलावा: यह आपके डीबग कॉन्फ़िगरेशन से _GLIBCXX_DEBUG को परिभाषित करने के लिए काम कर सकता है। प्रोजेक्ट विकल्पों को खोलने के लिए लक्ष्य में अपने निष्पादन योग्य को डबल-क्लिक करें, और उसके बाद प्रीप्रोसेसर मैक्रोज़ से _GLIBCXX_DEBUG हटा दें।

उम्मीद है कि इससे मदद मिलती है।

1

मुझे एक ही त्रुटि थी। मैं एक "कॉपी फ़ाइलें" निर्माण चरण बनाने के लिए भूल गया और ढांचे की प्रतिलिपि बनाएँ।

अपनी फ़ाइलें अपनी परियोजना परियोजना सेटिंग संपादित करने के

क्लिक दिखाने के लिए परियोजना नाविक में पहली बटन जाओ "बिल्ड जोड़े चरण" पर क्लिक करें लक्ष्य है कि आप में बढ़ावा lib उपयोग कर रहे हैं क्लिक करें निचली दाईं ओर स्थित बटन चुनें "जोड़ें कॉपी फ़ाइलें" पॉपअप में "गंतव्य" चेंज "फ़्रेमवर्क" खींचें प्रतिलिपि फ़ाइलों तालिका

करने के लिए परियोजना नाविक से libboost_regex.dylib छवि लिंक नहीं है स्क्रीन शॉट्स के लिए ऐसा काम कर रहा है: http://imgur.com/a/8ojye#6

+0

मुझे लगता है कि अगर प्रति नहीं हो रहा है, तो यह लाइब्रेरी के एक अलग (गैर-डीबग) संस्करण से जुड़ रहा है, जो बताएगा कि प्रतिलिपि चरण को क्यों जोड़ना है। –

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