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

时间:2012-11-22 13:38:11

标签: c++ linux unit-testing installation googletest

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

12 个答案:

答案 0 :(得分:131)

在开始之前,请确保您已阅读并理解 this note from Google!本教程简单易用gtest,但可能会引入nasty bugs

1。获取googletest框架

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

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

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

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

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

此步骤可能与发行版和发行版不同,因此请确保将标题和库复制到正确的目录中。我通过检查Debians former gtest libs所在的位置来完成此操作。但我确信有更好的方法可以做到这一点。注意:make install是危险的,不受支持

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

4。更新链接器的缓存

...并检查GNU Linker是否知道libs

$ 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 documentation以了解其工作原理。快乐的编码!

<强> 编辑: 这也适用于OS X!见"How to properly setup googleTest on OS X"

答案 1 :(得分: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

要验证安装,请使用以下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 

答案 2 :(得分:25)

让我专门为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。

答案 3 :(得分:8)

如果您正在使用CMake,则可以使用ExternalProject_Add所述的here

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

答案 4 :(得分:3)

Debian / Ubuntu的更新

Google Mock(软件包:google-mock)和Google Test(软件包:libgtest-dev)已合并。新软件包称为googletest。这两个旧名称仍可用于向后兼容,现在取决于新软件包googletest

因此,要从软件包存储库中获取库,您可以执行以下操作:

sudo apt-get install googletest -y
cd /usr/src/googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp googlemock/*.a googlemock/gtest/*.a /usr/lib

此后,您可以链接到-lgmock(如果不使用自定义main方法,则链接到-lgmock_main)和-lpthread。至少在我的情况下,这足以使用Google Test。

如果您想要最新版本的Google Test,请从github下载。之后,步骤类似:

git clone https://github.com/google/googletest
cd googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp lib/*.a /usr/lib

如您所见,创建库的路径已更改。请记住,新路径也可能很快对软件包存储库有效。

您可以使用sudo make install来代替手动复制库。它“当前”有效,但是请注意,它过去并不总是有效。另外,使用此命令时,您无法控制目标位置,并且您可能不想污染/usr/lib

答案 5 :(得分:1)

我同样对这种情况感到不知所措,最终为此创建了自己的Ubuntu源代码包。这些源包允许您轻松生成二进制包。它们基于最新的gtest&amp;这个帖子的gmock来源。

Google Test DEB Source Package

Google Mock DEB Source Package

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

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) 这似乎是一个普遍的问题。

答案 6 :(得分:1)

以防万一其他人在昨天(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

答案 7 :(得分:1)

askubuntu的回答对我有用。看起来比其他选项更简单,更不容易出错,因为它使用包DB_USER,DBPASSWORD,DB_HOST从那里获取源代码和构建:https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top

请参考该答案,但作为一种捷径我也提供了以下步骤:

libgtest-dev

之后,我可以构建依赖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/ 而没有问题的项目。

答案 8 :(得分:0)

这将在基于Ubuntu / Debian的系统中安装google test和mock库:

sudo apt-get install google-mock

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

答案 9 :(得分:0)

这将构建并安装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

答案 10 :(得分:0)

以下方法避免了手动弄乱/usr/lib目录,同时还需要对CMakeLists.txt文件进行最小的更改。它还可以让您的包管理器彻底卸载libgtest-dev

这个想法是当您通过{p>

libgtest-dev

源存储在位置sudo apt install libgtest-dev

您只需将/usr/src/googletest指向该目录,以便它可以找到必要的依赖项

只需将CMakeLists.txt替换为FindGTest

最后,它应该看起来像这样

add_subdirectory(/usr/src/googletest gtest)

答案 11 :(得分:-1)

基于@ ManuelSchneid3r答案的1.8.1 我必须做:

wget github.com/google/googletar xf release-1.8.1.tar.gz 
tar xf release-1.8.1.tar.gz
cd googletest-release-1.8.1/
cmake -DBUILD_SHARED_LIBS=ON .
make

然后,我做了make install,它似乎适用于1.8.1,但是 @ ManuelSchneid3r的意思是:

sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/include/gmock /usr/include
sudo cp `find .|grep .so$` /usr/lib/