Сборка Google Breakpad на Mac OS X - PullRequest
8 голосов
/ 23 марта 2011

Я пытаюсь создать Google Breakpad для Mac OS X как часть переноса приложения, основанную на ствольной версии 782.

Вики Breakpad указывает, что нужно собрать client / mac / Breakpad.xcodeproj, который производит Breakpad.framework, включая динамически связанную библиотеку, если я правильно понимаю.Существует также пример кода о том, как использовать это из приложения Objective-C, но все это кажется очень отличным от того, что кажется нормальным способом работы на других платформах, включая использование списков и других вещей, которые не являются частьюмоего приложения.Я бы предпочел сделать вещи как можно более похожими на разных платформах.

Например, this похоже на то, что 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

В моемПроект, мы делаем то же самое и просто ссылаемся на exception_handler.lib в Windows.Похоже, что в Linux Breakpad генерирует соответствующий libbreakpad_client.a, с которым можно связать таким же образом, но не в Mac OS X. Если я сделаю

./configure
make

из корневого каталога breakpad a libbreakpad.a генерируется, который не содержит обработчик исключений, а libbreakpad_client.a, который должен быть, не собирается.Вполне возможно, что я неправильно понял почти все, что касается обычного способа использования Breakpad, а также обычной процедуры создания внешних библиотек на Mac, поэтому любая помощь приветствуется.

Как мне собратьlibbreakpad_client.a в Mac OS X?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2013

Это может быть бесполезно в вашем случае, но я нашел, что это работает для проекта, над которым я работаю, который должен работать как на Linux, так и на OSX. В Linux мы используем «обычный» способ автоинструментов; в 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.

3 голосов
/ 23 марта 2011

К сожалению, в исходном коде Breakpad для этого нет решения. Проекты XCode просто создают платформу Breakpad, поскольку это более поддерживаемый клиентский API. Вы можете собрать код с вашим собственным набором Makefiles или любой другой конфигурацией сборки, которую вы пожелаете, так же, как Firefox, посмотрев на набор make-файлов Mozilla:

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 также собрать эту статическую библиотеку. Это не будет сложным патчем.

...