How to set up googleTest as a shared library on Linux

后端 未结 12 2426
北荒
北荒 2020-11-28 01:04

Debian does not provide any precompiled packages for gTest anymore. They suggest you integrate the framework into your project\'s makefile. But I want to keep my makefile cl

相关标签:
12条回答
  • 2020-11-28 01:37

    If you happen to be using CMake, you can use ExternalProject_Add as described here.

    This avoids you having to keep gtest source code in your repository, or installing it anywhere. It is downloaded and built in your build tree automatically.

    0 讨论(0)
  • 2020-11-28 01:37

    This will build and install both gtest and 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
    
    0 讨论(0)
  • 2020-11-28 01:41

    I was similarly underwhelmed by this situation and ended up making my own Ubuntu source packages for this. These source packages allow you to easily produce a binary package. They are based on the latest gtest & gmock source as of this post.

    Google Test DEB Source Package

    Google Mock DEB Source Package

    To build the binary package do this:

    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
    

    It may tell you that you need some pre-requisite packages in which case you just need to apt-get install them. Apart from that, the built .deb binary packages should then be sitting in the parent directory.

    For GMock, the process is the same.

    As a side note, while not specific to my source packages, when linking gtest to your unit test, ensure that gtest is included first (https://bbs.archlinux.org/viewtopic.php?id=156639) This seems like a common gotcha.

    0 讨论(0)
  • 2020-11-28 01:42

    It took me a while to figure out this because the normal "make install" has been removed and I don't use cmake. Here is my experience to share. At work, I don't have root access on Linux, so I installed the Google test framework under my home directory: ~/usr/gtest/.

    To install the package in ~/usr/gtest/ as shared libraries, together with sample build as well:

    $ 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
    

    To validate the installation, use the following test.c as a simple test example:

        #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();
        }
    

    To compile:

        $ 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 
    
    0 讨论(0)
  • 2020-11-28 01:45

    This answer from askubuntu is what worked for me. Seems simpler than other options an less error-prone, since it uses package libgtest-dev to get the sources and builds from there: https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top

    Please refer to that answer, but just as a shortcut I provide the steps here as well:

    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/
    

    After that, I could build my project which depends on gtest with no issues.

    0 讨论(0)
  • 2020-11-28 01:47

    Just in case somebody else gets in the same situation like me yesterday (2016-06-22) and also does not succeed with the already posted approaches - on Lubuntu 14.04 it worked for me using the following chain of commands:

    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
    
    0 讨论(0)
提交回复
热议问题