如何在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.解压缩并build立谷歌testing
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.更新链接器的caching
…并检查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
作为链接器标志来链接你的项目和库,如果你没有写你自己的testing主程序,显式的-lgtest_main
标志。
从这里开始,您可能想要了解Google框架的Google 文档 ,以了解它是如何工作的。 快乐的编码!
编辑:这也适用于OS X! 请参阅“如何在OS X上正确设置GoogleTest”
我花了一段时间才弄清楚这一点,因为正常的“make install”已经被删除,我不使用cmake。 这是我的经验分享。 在工作中,我在Linux上没有root访问权限,所以我在我的home目录下安装了Googletesting框架: ~/usr/gtest/
。
要在〜/ usr / gtest / as共享库中安装软件包,还要连同样例构build:
$ 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
要validation安装,请使用以下test.c作为一个简单的testing示例:
#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
请注意,这个软件包只安装源文件。 你必须自己编译代码来创build必要的库文件。 这些源文件应该位于/ 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源代码保存在存储库中,或者将其安装在任何地方。 它会自动下载并构build在构build树中。
我也同样不知所措,最终为此制作了自己的Ubuntu源码包。 这些源码包允许您轻松生成二进制包。 他们基于这篇文章中最新的gtest&gmock源码。
Google Test DEB源码包
Google Mock DEB源码包
要构build二进制包,请执行以下操作:
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安装它们。 除此之外,构build的.deb二进制包应该位于父目录中。
对于GMock,过程是一样的。
作为一个方面说明,虽然不是特定于我的源代码包,当链接gtest到你的unit testing时,确保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
从那里获取源代码和构build: https : libgtest-dev
-Googletesting?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/
之后,我可以build立我的项目,这取决于gtest
没有问题。
这将在Ubuntu / Debian系统中安装谷歌testing和模拟库:
sudo apt-get install google-mock
在基于debian的图像谷歌云testing。
这将构build和安装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