2

我正在尝试构建一个 googletest 单元测试,以作为我们可能使用的新单元测试框架的概念证明。在 googletest 中,有两种编写单元测试的方法:使用 main 或不使用 main。如果您没有定义 main,您可以链接到 gtest_main 库,其中包含一个 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 ;

我收到许多与未定义的 blah 引用有关的链接器错误。未定义的引用似乎来自 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 回答