2

使用できる可能性のある新しい単体テストフレームワークとして、概念実証用のgoogletest単体テストを構築しようとしています。googletestでは、単体テストを作成する方法が2つあります。メインを使用する方法とメインを使用しない方法です。mainを定義しない場合は、main()関数を含むgtest_mainライブラリにリンクして、時間を節約できます。私の環境では、Jamを使用してバイナリを構築しています。コード内でmain()を使用してlibgtestライブラリを使用してコンパイルするバイナリを取得しましたが、mainを使用せずにJamでビルドする方法を探しています。

基本ケース(main()関数を使用):

私はこれでバイナリを構築することができます:

Main MyUnitTestBinary : MyClass.cpp ;
LinkLibraries MyUnitTestBinary : libgtest ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;

壊れたケース(main()関数なし):

これでバイナリを作成することはできません。オブジェクトをリンクしようとすると、多くのエラーが表示されます。

Main sample1_unittest : sample1.cc sample1_unittest.cc ;
LinkLibraries sample1_unittest : gtest_main ;
Library gtest_main : $(GTEST_DIR)/src/gtest_main.cc ;

何とかへの未定義の参照に関連する多くのリンカーエラーが発生します。未定義の参照は、私のコードの一部ではないtesting::internal名前空間から来ているようです。

これをどのように攻撃できるか、または問題に関するより多くの手がかりを探す方法について何か考えはありますか?

4

1 に答える 1

5

答えが見つかりました!libgtestとgtest_mainをバイナリに誤って追加していませんでした。gtest_mainにもフレームワークの定義が含まれていると思いましたので、どちらかをリンクする必要がありました。実際、常にlibgtestをリンクする必要があり、標準のmain()関数を変更したくない場合にのみgtest_mainをリンクする必要があります。

だから...正解は追加することです:

LinkLibraries sample1_unittest : libgtest gtest_main ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;
于 2010-10-08T23:20:46.820 に答える