簡體   English   中英

在Mac OS X上構建Google Breakpad

[英]Building Google Breakpad on Mac OS X

我正在嘗試基於主干版本782為Mac OS X構建Google Breakpad作為移植應用程序的一部分。

Breakpad wiki指定應該構建client / mac / Breakpad.xcodeproj,如果我理解正確,它會產生一個包含動態鏈接庫的Breakpad.framework。 還有關於如何在Objective-C應用程序中使用它的示例代碼,但所有這些似乎與在其他平台上執行操作的正常方式非常不同,包括使用plist和其他不屬於的東西我的申請 我更願意跨平台做盡可能相似的事情。

例如, 似乎是Firefox使用Breakpad的方式:

// 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

在我的項目中,我們正在做同樣的事情,只是鏈接到Windows上的exception_handler.lib 似乎在Linux上,Breakpad會生成相應的libbreakpad_client.a ,它可以以相同的方式鏈接,但不能在Mac OS X上鏈接。如果我這樣做

./configure
make

從該breakpad根目錄libbreakpad.a產生不包含異常處理程序,這應該不是正在修建的libbreakpad_client.a。 我很可能誤解了使用Breakpad的正常方式以及在Mac上構建外部庫的正常程序,所以任何幫助都會受到贊賞。

如何在Mac OS X上構建libbreakpad_client.a

這可能對您的情況沒有幫助,但我發現這適用於我正在開發的項目,需要在Linux和OSX上運行。 在Linux上,我們使用“正常”的autotools做事方式; 在OSX上,我們調用xcodebuild來創建Breakpad.framework ,然后鏈接到它。

這是CMakeLists.txt文件的相關部分( 對於CMake,請參見此處 ):

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()

如果您的應用程序是使用clang -stdlib=libc++構建的(如果您大量使用C ++ 11,這是很正常的),您應該附加短語GCC_VERSION=com.apple.compilers.llvm.clang.1_0 OTHER_CFLAGS=-stdlib=libc++ OTHER_LDFLAGS=-stdlib=libc++xcodebuild行的末尾。 這將迫使xcodebuild做正確的事情。

如果您的應用程序是使用GCC和GNU libstdc ++構建的,則無需向xcodebuild行添加任何內容。

遺憾的是,Breakpad源代碼中沒有解決方案。 XCode項目只是構建Breakpad框架,因為這是支持更多的客戶端API。 您可以使用自己的Makefile集或任何構建設置來構建代碼,就像Firefox通過查看Mozilla makefile集一樣:

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

並收集CSRCS / CPPSRCS / CMSRCS / CMMSRCS中引用的文件集,並構建所有這些文件。

您可能還會在Breakpad問題跟蹤器中提交一個錯誤,要求XCode項目也構建此靜態庫。 這不是一個困難的補丁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM