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

Man*_*d3r 80 c++ linux installation unit-testing googletest

Debian不再为gTest提供任何预编译的包.他们建议您将框架集成到项目makefile中.但我想保持make文件干净.如何设置gTest像以前的版本(<1.6.0),以便我可以链接aganist库?

Man*_*d3r 133

在开始之前,请确保您已阅读并理解 Google的此说明!本教程简单易用,但可能会引入令人讨厌的错误.

1.获取googletest框架

wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

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

tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make
Run Code Online (Sandbox Code Playgroud)

3."安装"系统上的标头和库.

此步骤可能与发行版到发行版不同,因此请确保将标头和库复制到正确的目录中.我通过检查Debian以前的gtest libs所在的位置来实现这一点.但我确信有更好的方法可以做到这一点.注意:make install很危险,不受支持

$ sudo cp -a include/gtest /usr/include
$ sudo cp -a libgtest_main.so libgtest.so /usr/lib/
Run Code Online (Sandbox Code Playgroud)

4.更新链接器的缓存

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

$ sudo ldconfig -v | grep gtest
Run Code Online (Sandbox Code Playgroud)

如果输出如下所示:

libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0
Run Code Online (Sandbox Code Playgroud)

, 一切都好.

gTestframework现在可以使用了.只是不要忘记通过设置-lgtest为链接器标志将项目与库链接,并且如果您没有编写自己的测试主程序,则显示-lgtest_main标记.

从这里开始,您可能想要了解有关框架的Googles 文档,以了解它的工作原理.快乐的编码!

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

  • 引用makefile的输出:`'make install'是危险的,不受支持.相反,请参阅自述文件,了解如何将Google Test集成到您的构建系统中 (12认同)
  • 您的帖子已过期。请不要误导人们,`sudo cp -a libgtest_main.so libgtest.so /usr/lib/` 不再起作用。该文件甚至不存在。 (3认同)
  • 是否没有`make install`目标可以使用而不是手动复制库和标题? (2认同)

小智 28

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

sudo apt-get install libgtest-dev
Run Code Online (Sandbox Code Playgroud)

请注意,此程序包仅安装源文件.您必须自己编译代码以创建必要的库文件.这些源文件应位于/ 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
Run Code Online (Sandbox Code Playgroud)

现在要编译使用gtest的程序,你必须将它链接到:

-lgtest -lgtest_main
Run Code Online (Sandbox Code Playgroud)

这对我来说在Ubuntu 14.04LTS上非常适合.

  • “sudo make install”适用于 Ubuntu 18.04,但不适用于 Ubuntu 16.04。 (2认同)

小智 25

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

要在〜/ usr/gtest /中作为共享库安装软件包,以及样本构建:

$ 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
Run Code Online (Sandbox Code Playgroud)

要验证安装,请使用以下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();
    }
Run Code Online (Sandbox Code Playgroud)

编译:

    $ 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 
Run Code Online (Sandbox Code Playgroud)


Fra*_*ser 9

如果您碰巧使用CMake,可以ExternalProject_Add按照此处的说明使用.

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