2011-03-23 16 views
6

मैं ट्रंक संशोधन 782.बिल्डिंग गूगल Breakpad मैक ओएस एक्स पर

The Breakpad wiki के आधार पर, एक आवेदन पोर्टिंग के एक भाग के रूप में मैक ओएस एक्स के लिए Google Breakpad बनाने का प्रयास कर रहा हूँ यह बताता है कि एक ग्राहक/मैक/Breakpad बनाने चाहिए .xcodeproj, जो एक ब्रेकपैड.फ्रेमवर्क का उत्पादन करता है जिसमें गतिशील रूप से लिंक्ड lib शामिल है यदि मैं सही ढंग से समझता हूं। ऑब्जेक्टिव-सी एप्लिकेशन से इसका उपयोग करने के तरीके पर नमूना कोड भी है, लेकिन यह सब कुछ प्लेटफ़ॉर्म पर चीजों को करने का सामान्य तरीका प्रतीत होता है, जिसमें प्लिस्ट और अन्य चीजों का उपयोग शामिल है जो भाग नहीं हैं मेरे आवेदन का मैं प्लेटफॉर्म पर जितना संभव हो उतना ही काम करता हूं।

// include exception_handler.h from client/<platform>/handler, 
// using ... here for brevity 
#include "... exception_handler.h" 
... 
gExceptionHandler = new google_breakpad:: 
    ExceptionHandler(tempPath.get(), 
        nsnull, 
        MinidumpCallback, 
        nsnull, 
#if defined(XP_WIN32) 
        google_breakpad::ExceptionHandler::HANDLER_ALL); 
#else 
        true); 
#endif 

अपने प्रोजेक्ट में, हम एक ही बात कर रहे हैं और सिर्फ विंडोज पर exception_handler.lib के खिलाफ लिंक:

उदाहरण के लिए, this तरीका है कि फ़ायरफ़ॉक्स Breakpad का उपयोग करता प्रतीत होता है। ऐसा लगता है कि लिनक्स पर, Breakpad एक इसी libbreakpad_client.a कि एक ही तरह से खिलाफ जोड़ा जा सकता है उत्पन्न करता है लेकिन मैक ओएस एक्स पर नहीं अगर मैं breakpad रूट निर्देशिका एक libbreakpad.a उत्पन्न होता है जो ऐसा नहीं करता से

./configure 
make 

करना अपवाद हैंडलर, और libbrepad_client.a शामिल है जिसे बनाया नहीं जा रहा है। ब्रेकपैड का उपयोग करने के सामान्य तरीके के साथ-साथ मैक पर बाहरी पुस्तकालयों के निर्माण के लिए सामान्य प्रक्रिया दोनों के बारे में मुझे कुछ भी गलत समझा जा सकता है, इसलिए किसी भी मदद की सराहना की जाती है।

मैक ओएस एक्स पर मैं libbreakpad_client.a कैसे बना सकता हूं?

+2

हैलो villintehaspam, क्या आप अपने ब्रेकपैड स्रोतों को साझा कर सकते हैं जो इसे MacOSX के तहत संकलित करना संभव है? मुझे एक ही समस्या है लेकिन मैं यह नहीं समझ सकता कि अपडेट किए गए मेकफ़ाइल का सही तरीके से उपयोग कैसे करें ;-(। मेरे यहां मेरा प्रश्न है: http://stackoverflow.com/questions/10450586/qt-google-breakpad-and- मैक्स धन्यवाद। –

उत्तर

3

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

http://mxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/google-breakpad/src/common/Makefile.in

http://mxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/google-breakpad/src/common/mac/Makefile.in

http://mxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/google-breakpad/src/client/Makefile.in

http://mxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/google-breakpad/src/client/mac/handler/Makefile.in

http://mxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Makefile.in

और सीएसआरसीएस/सीपीपीएसआरसीएस/सीएमएसआरसीएस/सीएमएमएसआरसीएस में संदर्भित फाइलों के सेट को इकट्ठा करना, और उन सभी का निर्माण करना।

आप यह पूछने के लिए Breakpad issue tracker में एक बग भी दर्ज कर सकते हैं कि XCode प्रोजेक्ट भी इस स्थिर लाइब्रेरी का निर्माण करता है। यह एक मुश्किल पैच नहीं होगा।

+0

धन्यवाद टेड, बहुत उपयोगी पॉइंटर्स! – villintehaspam

+0

मैं इस धागे को खोद रहा हूं, लेकिन मैं Makefile.in का उपयोग कैसे कर सकता हूं? क्या कोई उपकरण है जिसका उपयोग करना चाहिए? इन मेकफ़ाइल.in से शुरू होने वाली प्रक्रिया क्या है फाइलें, पुस्तकालयों को संकलित करने के लिए? – Mike

+0

एफवाईआई, मोज़िला ने सभी मेकफ़ाइल को अपने भंडार से हटा दिया, क्योंकि वे बनाने से दूर चले गए। हालांकि स्रोतों के खिलाफ आपकी सलाह निर्माण अभी भी रहता है, क्योंकि वे [moz.build] (http) में सूचीबद्ध हैं : //mxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/google-breakpad/src/client/mac/handler/moz.build) फ़ाइलों को 'UNIFIED_SOURCES' के रूप में। – zmo

4

यह आपके मामले में सहायक नहीं हो सकता है, लेकिन मुझे यह एक परियोजना के लिए काम करने के लिए मिला है जिसे मैं लिनक्स और ओएसएक्स दोनों पर काम करने की ज़रूरतों पर काम कर रहा हूं। लिनक्स पर हम चीजों को करने के "सामान्य" autotools तरीके का उपयोग करते हैं; ओएसएक्स पर हम Breakpad.framework बनाने के लिए xcodebuild का आह्वान करते हैं और उसके बाद लिंक करते हैं।

यहां सीएमकेलिस्ट के प्रासंगिक भाग हैं।txt फ़ाइल (for CMake see here):

IF(LINUX) 
    add_custom_target(
    GOOGLE_BREAKPAD_MAKEFILE 
    COMMAND cd ../google-breakpad/ && ([ -e Makefile ] || (autoreconf && bash configure)) 
) 
    add_custom_target(
    GOOGLE_BREAKPAD 
    COMMAND cd ../google-breakpad/ && $(MAKE) 
) 
    add_dependencies(GOOGLE_BREAKPAD GOOGLE_BREAKPAD_MAKEFILE) 
ENDIF() 

IF(APPLE) 
    add_custom_target(
    GOOGLE_BREAKPAD 
    COMMAND cd ../google-breakpad/src/client/mac/ && xcodebuild -sdk macosx 
) 
ENDIF() 

आपके आवेदन (जो बहुत सामान्य है अगर आप की सी ++ 11 भारी उपयोग करते हैं) clang -stdlib=libc++ के साथ बनाया गया है, तो आप वाक्यांश GCC_VERSION=com.apple.compilers.llvm.clang.1_0 OTHER_CFLAGS=-stdlib=libc++ OTHER_LDFLAGS=-stdlib=libc++xcodebuild पंक्ति के अंत में संलग्न करना होगा । यह सही चीज़ करने के लिए xcodebuild को मजबूर करेगा।

यदि आपका आवेदन जीसीसी और जीएनयू libstdC++ के साथ बनाया गया है, तो आपको xcodebuild लाइन में कुछ भी जोड़ने की आवश्यकता नहीं है।