8

トランクリビジョン782に基づいて、アプリケーションの移植の一部としてMacOSX用のGoogleBreakpadを構築しようとしています。

Breakpad wikiは、client / mac / Breakpad.xcodeprojをビルドする必要があることを指定しています。これにより、正しく理解していれば、動的にリンクされたlibを含む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

私のプロジェクトでは、同じことを行っており、exception_handler.libWindows上でリンクしているだけです。Linuxでは、Breakpadlibbreakpad_client.aは同じ方法でリンクできる対応するものを生成するようですが、MacOSXではそうではありません。

./configure
make

ブレークパッドのルートディレクトリから、libbreakpad.a例外ハンドラを含まないaが生成され、ビルドされるべきではないlibbreakpad_client.aが生成されます。私は、Breakpadを使用する通常の方法と、Macで外部ライブラリを構築するための通常の手順の両方について、ほとんど何でも誤解している可能性があります。

libbreakpad_client.aMac OS Xでビルドするにはどうすればよいですか?

4

3 に答える 3

4

これはあなたの場合には役に立たないかもしれませんが、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とGNUlibstdc++で構築されている場合は、xcodebuild行に何も追加する必要はありません。

于 2013-09-15T09:16:49.397 に答える
3

残念ながら、Breakpadソースにはこれに対する解決策はありません。XCodeプロジェクトは、よりサポートされているクライアントAPIであるため、Breakpadフレームワークを構築するだけです。独自の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 Issue Trackerにバグを報告して、XCodeプロジェクトがこの静的ライブラリをビルドするように依頼することもできます。難しいパッチではありません。

于 2011-03-23T16:36:40.290 に答える
0

Mac OS Xでlibbreakpad_client.aをビルドするにはどうすればよいですか?

dynamic frameworkmacOSIntel64とAppleSilicon用にしかビルドできませんでした

チェックアウトhttps://github.com/Sunbreak/cli-breakpad.trial

フェッチコード

mkdir $BREAKPAD && cd $BREAKPAD
fetch breakpad

セットアップとビルド

cd $BREAKPAD/src
./configure && make
cd $BREAKPAD/src/client/mac && xcodebuild -target Breakpad
cd $BREAKPAD/src/tool/mac/dump_syms && xcodebuild -target dump_syms

ライブラリ&&ツールをインストールする

mkdir -p ./breakpad/mac/$(arch)
cp -r $BREAKPAD/src/src/client/mac/build/Release/Breakpad.framework ./breakpad/mac/
cp $BREAKPAD/src/src/tools/mac/dump_syms/build/Release/dump_syms ./breakpad/mac/
cp $BREAKPAD/src/src/processor/minidump_stackwalk ./breakpad/mac/$(arch)
mkdir Frameworks && cd Frameworks && ln -s ../breakpad/mac/Breakpad.framework .
于 2021-09-22T00:08:51.797 に答える