Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';gtest.lib和gtest_main.lib之间的区别是什么? 谷歌的C++测试框架有两个输出库:一个是Gest.LIB,另一个是GestByMav.LIB。根据on,我们应该链接到gtest_main.lib,但我正在链接到gtest.lib,我拥有的示例测试用例运行良好_C++_Visual Studio 2008_Linker_Googletest - Fatal编程技术网

什么';gtest.lib和gtest_main.lib之间的区别是什么? 谷歌的C++测试框架有两个输出库:一个是Gest.LIB,另一个是GestByMav.LIB。根据on,我们应该链接到gtest_main.lib,但我正在链接到gtest.lib,我拥有的示例测试用例运行良好

什么';gtest.lib和gtest_main.lib之间的区别是什么? 谷歌的C++测试框架有两个输出库:一个是Gest.LIB,另一个是GestByMav.LIB。根据on,我们应该链接到gtest_main.lib,但我正在链接到gtest.lib,我拥有的示例测试用例运行良好,c++,visual-studio-2008,linker,googletest,C++,Visual Studio 2008,Linker,Googletest,这两个库之间有什么区别?我链接到哪个库重要吗?唯一合理的区别是gtest_main.lib提供了测试应用程序入口点的默认实现(即main函数): 引用自: “[…]也许你认为 所有那些main()函数都太多了 工作?我们完全同意你的意见 这就是为什么谷歌测试提供了 main()的基本实现。如果 适合您的需要,然后只需链接您的 使用gtest_主库进行测试,然后 我们可以走了。” 如果你想自己编写你的主函数-你应该链接到gtest.lib你需要将gtest.lib链接到你的带有单元测试的项目中。事

这两个库之间有什么区别?我链接到哪个库重要吗?

唯一合理的区别是gtest_main.lib提供了测试应用程序入口点的默认实现(即
main
函数):

引用自:

“[…]也许你认为 所有那些main()函数都太多了 工作?我们完全同意你的意见 这就是为什么谷歌测试提供了 main()的基本实现。如果 适合您的需要,然后只需链接您的 使用gtest_主库进行测试,然后 我们可以走了。”


如果你想自己编写你的主函数-你应该链接到gtest.lib

你需要将
gtest.lib
链接到你的带有单元测试的项目中。

事实上,googletest可用的各种构建方法并不一致地构建库。但至少这一部分是一致的:

gtest gtest库(根据您的平台和您是否使用共享库而不同地称为
gtest.a
gtest.so
gtest.lib
libgtest.a
)包含gtest框架的目标代码,包括测试所需的所有内容。基本上,它实现了从
gtest/gest.h
可以使用的所有功能。它不包含
main()
方法

gtest_main 它包括一个简单的main方法,它将启动注册的测试,类似这样(从1.8开始):

现在不一致的部分是,
gtest_main
有时还包括
gtest
中的所有内容,因此您只需要链接
gtest
(如果您想编写自己的
main()
方法)或
gtest_main
(如果您想使用上述的罐装main方法)。例如,如果使用包含在以下文件中的
Makefile
生成,则会出现这种情况:

显然,
gtest_main.a
包括
gtest.a
所做的一切,以及包含main函数的
gtest main.o
对象

然而,对于CMake构建,情况有所不同,至少对于某些构建工件是这样。例如,对于主库:

这里,
gtest_main
只包含main函数,其他什么都不包含1。
target\u link\u libraries
行告诉使用此CMake构建的任何其他内容,如果链接
gtest\u main
,则还应链接
gtest
,因此在文件的其余部分,通常只会看到针对
gtest\u main
链接的内容。事实上,
CMakeLists.txt
文件前面的文档明确了这一点:

# Defines the gtest & gtest_main libraries.  User tests should link
# with one of them.
请注意“其中一个”部分。他们真正的意思是,如果您使用相同的CMake系统进行构建,您可以这样做,但在实际链接级别,您需要
libtest.a
libgtest\u main.a
,否则您将无法获取编写测试所需的内容



1事实上,使用CMake libgtest.a的结果是1755216字节,而libgtest_main.a只有微不足道的3836字节。使用
。/make/Makefile
构建,这些数字分别是3365240和3398356。显然,除了所包含的文件之外,还有一些不同之处,这些文件放大了
Makefile
版本的大小。

复制/粘贴
main()
比将项目设置为链接gtest_main.lib要费事吗?我认为不是。无论如何,谢谢你的报价。我想知道为什么这样做。gtest_main不是gtest的替代品。如果您想以任何一种方式使用该库,则需要与gtest链接。如果您还需要默认的main实现,也可以链接到gtest_main。我在设置gtest以处理我的解决方案时遇到问题。我添加了一个新项目(从一个示例中复制了源代码),添加了相关的include和linking目录,并指定了要链接的gtest.lib和gtest_main.lib。如果我将项目构建为.dll,则不会发现测试,如果我将项目构建为.exe,则没有定义入口点。我如何设置我的项目以使用gtest_main()函数作为入口点?@TamásSzelei-至少对于
make
build-in-release 1.8(截至今天的最新版本)来说,情况并非如此。对应的依赖项分别是
gtest all.o gtest_main.o
gtest all.o
for
gtest_main
gtest
,因此
gtest_main
gtest
的超集,包含所有gtest功能。@TamásSzelei,归档:-虽然有354个未决问题,但我对快速解决没有太大希望。这个最小的例子可能会澄清一些问题:
gtest.a : gtest-all.o
    $(AR) $(ARFLAGS) $@ $^

gtest_main.a : gtest-all.o gtest_main.o
    $(AR) $(ARFLAGS) $@ $^
cxx_library(gtest "${cxx_strict}" src/gtest-all.cc)
cxx_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
target_link_libraries(gtest_main gtest)
# Defines the gtest & gtest_main libraries.  User tests should link
# with one of them.