如何在Linux上将googleTest设置为共享库

Debian不再为gTest提供任何预编译的软件包。 他们build议你把框架整合到你的项目makefile中。 但是我想保持我的make文件干净。 如何设置gTest像以前的版本(<1.6.0),以便我可以链接aganist图书馆?

在开始之前,请确保您已阅读并理解Google提供的此笔记 ! 本教程使gtest容易,但可能会引入讨厌的错误 。

1.获取googletest框架

 wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz 

或者手动获取。 我不会保留这个小小的方法,所以如果你偶然发现并且链接已经过时,可以随意编辑它。

2.解压缩并建立谷歌测试

 tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make 

3.“安装”您的系统上的标题和库。

这一步可能会有所不同,从发行到发行,所以请确保您复制标题和库在正确的目录。 我通过检查Debian以前的gtest库位于何处来完成此工作。 但我相信有更好的方法来做到这一点。 注意: make install是危险的,不支持

 $ sudo cp -a include/gtest /usr/include $ sudo cp -a libgtest_main.so libgtest.so /usr/lib/ 

4.更新链接器的缓存

…并检查GNU链接器是否知道库

 $ sudo ldconfig -v | grep gtest 

如果输出如下所示:

 libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0 

, 一切安好。

gTestframework现在可以使用了。 只要不要忘记通过设置-lgtest作为链接器标志来链接你的项目和库,如果你没有写你自己的测试主程序,显式的-lgtest_main标志。

从这里开始,您可能想要了解Google框架的Google 文档 ,以了解它是如何工作的。 快乐的编码!

编辑:这也适用于OS X! 请参阅“如何在OS X上正确设置GoogleTest”

我花了一段时间才弄清楚这一点,因为正常的“make install”已经被删除,我不使用cmake。 这是我的经验分享。 在工作中,我在Linux上没有root访问权限,所以我在我的home目录下安装了Google测试框架: ~/usr/gtest/

要在〜/ usr / gtest / as共享库中安装软件包,还要连同样例构建:

 $ mkdir ~/temp $ cd ~/temp $ unzip gtest-1.7.0.zip $ cd gtest-1.7.0 $ mkdir mybuild $ cd mybuild $ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" .. $ make $ cp -r ../include/gtest ~/usr/gtest/include/ $ cp lib*.so ~/usr/gtest/lib 

要验证安装,请使用以下test.c作为一个简单的测试示例:

  #include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); } 

编译:

  $ export GTEST_HOME=~/usr/gtest $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp 

让我专门为Ubuntu用户回答这个问题。 首先安装gtest开发包。

 sudo apt-get install libgtest-dev 

请注意,这个软件包只安装源文件。 你必须自己编译代码来创建必要的库文件。 这些源文件应该位于/ usr / src / gtest。 浏览到这个文件夹并使用cmake来编译这个库:

 sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo cmake CMakeLists.txt sudo make # copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder sudo cp *.a /usr/lib 

现在编译你的使用gtest的程序,你必须把它连接到:

 -lgtest -lgtest_main 

这在Ubuntu 14.04LTS上完美的工作。

如果您碰巧使用CMake,那么您可以按照此处所述使用ExternalProject_Add

这样可以避免您必须将gtest源代码保存在存储库中,或者将其安装在任何地方。 它会自动下载并构建在构建树中。

我也同样不知所措,最终为此制作了自己的Ubuntu源码包。 这些源码包允许您轻松生成二进制包。 他们基于这篇文章中最新的gtest&gmock源码。

Google Test DEB源码包

Google Mock DEB源码包

要构建二进制包,请执行以下操作:

 tar -xzvf gtest-1.7.0.tar.gz cd gtest-1.7.0 dpkg-source -x gtest_1.7.0-1.dsc cd gtest-1.7.0 dpkg-buildpackage 

它可能告诉你,你需要一些先决条件包,在这种情况下,你只需要apt-get安装它们。 除此之外,构建的.deb二进制包应该位于父目录中。

对于GMock,过程是一样的。

作为一个方面说明,虽然不是特定于我的源代码包,当链接gtest到你的单元测试,确保gtest包括在第一( https://bbs.archlinux.org/viewtopic.php?id=156639 )这似乎是一个共同陷阱。

以防万一昨天(2016-06-22)有人像我一样遇到同样的情况,而且在已经发布的方法上也不成功 – 在Lubuntu 14.04它使用下面的命令行工作:

 git clone https://github.com/google/googletest cd googletest cmake -DBUILD_SHARED_LIBS=ON . make cd googlemock sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/ sudo ldconfig 

来自askubuntu的这个答案是对我有用的。 看起来比其他选项更简单,不太容易出错,因为它使用包libgtest-dev从那里获取源代码和构建: https : libgtest-dev -Google测试?answertab =#投票制表顶部

请参考这个答案,但只是作为一个快捷方式,我也提供了这里的步骤:

 sudo apt-get install -y libgtest-dev sudo apt-get install -y cmake cd /usr/src/gtest sudo cmake . sudo make sudo mv libg* /usr/lib/ 

之后,我可以建立我的项目,这取决于gtest没有问题。

这将在Ubuntu / Debian系统中安装谷歌测试和模拟库:

 sudo apt-get install google-mock 

在基于debian的图像谷歌云测试。

这将构建和安装gtest和gmock 1.7.0:

 mkdir /tmp/googleTestMock tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock cd /tmp/googleTestMock mv googletest-release-1.7.0 gtest cd googlemock-release-1.7.0 cmake -DBUILD_SHARED_LIBS=ON . make -j$(nproc) sudo cp -a include/gmock /usr/include sudo cp -a libgmock.so libgmock_main.so /usr/lib/ sudo cp -a ../gtest/include/gtest /usr/include sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/ sudo ldconfig