2011-03-23 67 views
6

我试图为Mac OS X打造Google Breakpad如将应用程序移植的一部分的基础上,树干修订版782大厦谷歌Breakpad在Mac OS X

The Breakpad wiki指定一个要建立客户端/ MAC/Breakpad .xcodeproj,如果我理解正确,它会生成包含动态链接库的Breakpad.framework。还有一些关于如何从Objective-C应用程序中使用它的示例代码,但所有这些似乎都与在其他平台上执行操作的正常方式大不相同,包括使用plists和其他不属于部分的东西我的应用程序。我宁愿在各个平台上尽可能地做类似的事情。

例如,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.如果我从产生libbreakpad.a的breakpad根目录没有做

./configure 
make 

包含异常处理程序以及不应构建的libbreakpad_client.a。我很可能误解了任何使用Breakpad的正常方式以及在Mac上构建外部库的常规过程,因此,任何帮助都是值得赞赏的。

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

+2

你好villintehaspam,请你分享一下你可以在MacOSX下编译它的breakpad源代码吗?我有一个类似的问题,但我不知道如何正确使用更新的makefiles ;-(。我有我的问题在这里:http://stackoverflow.com/questions/10450586/qt-google-breakpad-and- macos Thanks。 – 2012-05-04 14:18:33

回答

3

不幸的是,在Breakpad源代码中没有解决方案。 XCode项目只是构建Breakpad框架,因为这是更受支持的客户端API。你可以用自己的一套的Makefile或构建代码的任何构建设置你通过看组Mozilla的makefile文件的渴望同样的方式Firefox没有:

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 issue tracker中提出一个错误,要求XCode项目也构建这个静态库。这不会是一个困难的补丁。

+0

谢谢Ted,非常有用的指针! – villintehaspam 2011-03-24 09:47:43

+0

我在挖这个线程,但是我怎样才能使用Makefile.in?有没有我应该使用的工具?从这些Makefile.in开始的过程是什么?文件,以获得编译的库? – Mike 2013-01-24 17:30:52

+0

仅供参考,mozilla将所有Makefiles从其存储库中删除,因为它们从make中移除。尽管直接针对源的建议仍然存在,因为它们在[moz.build](http ://mxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/google-breakpad/src/client/mac/handler/moz.build)文件为'UNIFIED_SOURCES'。 – zmo 2014-09-21 12:37:19

4

这可能对您的情况没有帮助,但我发现这适用于我正在开发的项目,需要在Linux和OSX上都可以使用。在Linux上,我们使用“正常”自动工具的方式来做事;在OSX上,我们调用xcodebuild创建Breakpad.framework,然后链接到它。

下面是CMakeLists的相关部分。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() 

如果您的应用程序与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行添加任何内容。