Frage So richten Sie googleTest als gemeinsam genutzte Bibliothek unter Linux ein


Debian stellt keine vorkompilierten Pakete für gTest mehr zur Verfügung. Sie schlagen vor, das Framework in das Makefile Ihres Projekts zu integrieren. Aber ich möchte meine Make-Datei sauber halten. Wie richte ich gTest wie die früheren Versionen (<1.6.0) ein, damit ich die Bibliothek verlinken kann?


76
2017-11-22 13:38


Ursprung


Antworten:


Bevor Sie beginnen, stellen Sie sicher, dass Sie gelesen und verstanden haben diese Notiz von Google! Dieses Tutorial macht die Verwendung von gtest einfach, kann aber einführen fiese Bugs.

1. Holen Sie sich das GoogleTest-Framework

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

Oder hol es dir Hand. Ich werde dieses kleine How-to nicht beibehalten, also wenn Sie darüber stolperten und die Links veraltet sind, können Sie es gerne bearbeiten.

2. Entpacke und baue einen Google-Test

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

3. Installieren Sie die Header und Bibliotheken auf Ihrem System.

Dieser Schritt kann sich von Distribution zu Distribution unterscheiden. Stellen Sie daher sicher, dass Sie die Header und Bibliotheken in das richtige Verzeichnis kopieren. Ich habe dies erreicht, indem ich überprüft habe, wo Debians ehemalige gtest libs wurden lokalisiert. Aber ich bin sicher, es gibt bessere Möglichkeiten, dies zu tun. Hinweis: make install ist gefährlich und wird nicht unterstützt

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

4. Aktualisieren Sie den Cache des Linkers

... und überprüfe ob der GNU Linker die libs kennt

$ sudo ldconfig -v | grep gtest

Wenn die Ausgabe so aussieht:

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

, alles ist gut.

gTestframework ist jetzt einsatzbereit. Vergiss nicht, dein Projekt mit der Bibliothek zu verknüpfen, indem du es einstellst -lgtest als Linker-Flag und optional, wenn Sie nicht Ihre eigene Test-Mainroutine schreiben, die explizite -lgtest_main Flagge.

Von hier aus möchten Sie vielleicht nach Googles gehen Dokumentation über den Rahmen, um zu lernen, wie es funktioniert. Glückliche Kodierung!

Bearbeiten: Dies funktioniert auch für OS X! Sehen "So richten Sie googleTest unter OS X richtig ein"


125
2017-11-22 13:38



Es hat eine Weile gedauert, bis ich das herausgefunden hatte, weil die normale "make install" entfernt wurde und ich nicht cmake benutze. Hier ist meine Erfahrung zu teilen. Bei der Arbeit habe ich keinen Root-Zugriff auf Linux, deshalb habe ich das Google-Testframework unter meinem Home-Verzeichnis installiert: ~/usr/gtest/.

So installieren Sie das Paket in ~ / usr / gtest / als gemeinsam genutzte Bibliotheken, zusammen mit dem Beispiel-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

Verwenden Sie das folgende test.c als ein einfaches Testbeispiel, um die Installation zu überprüfen:

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

Kompilieren:

    $ 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 

24
2018-01-23 16:33



Lassen Sie mich dies speziell für Benutzer von ubuntu beantworten. Beginnen Sie zunächst mit der Installation des gtest-Entwicklungspakets.

sudo apt-get install libgtest-dev

Beachten Sie, dass dieses Paket nur Quelldateien installiert. Sie müssen den Code selbst kompilieren, um die notwendigen Bibliotheksdateien zu erstellen. Diese Quelldateien sollten sich in / usr / src / gtest befinden. Navigieren Sie zu diesem Ordner und verwenden Sie cmake, um die Bibliothek zu kompilieren:

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

Jetzt, um Ihre Programme zu kompilieren, die gtest verwenden, müssen Sie es verbinden mit:

-lgtest -lgtest_main

Dies funktionierte perfekt für mich auf Ubuntu 14.04LTS.


16
2018-01-31 09:43



Wenn Sie CMake verwenden, können Sie verwenden ExternalProject_Add wie beschrieben Hier.

Dies verhindert, dass Sie gtest-Quellcode in Ihrem Repository aufbewahren oder irgendwo installieren müssen. Es wird heruntergeladen und automatisch in Ihrem Build-Baum erstellt.


7
2017-11-22 13:51



Ich war in ähnlicher Weise von dieser Situation nicht begeistert und habe meine eigenen Ubuntu-Quellpakete dafür erstellt. Mit diesen Quellpaketen können Sie problemlos ein Binärpaket erstellen. Sie basieren auf der neuesten gtest & gmock Quelle ab diesem Post.

Google Test DEB-Quellpaket

Google Mock DEB-Quellpaket

Um das Binärpaket zu erstellen, mache folgendes:

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

Es kann Ihnen sagen, dass Sie einige Voraussetzung Pakete benötigen in diesem Fall müssen Sie nur apt-get installieren sie. Abgesehen davon sollten sich die eingebauten .deb-Binärpakete dann im übergeordneten Verzeichnis befinden.

Für GMock ist der Prozess der gleiche.

Als Nebenbemerkung, stellen Sie sicher, dass gtest als erste enthalten ist, wenn Sie gtest mit Ihrem Komponententest verknüpfen.https://bbs.archlinux.org/viewtopic.php?id=156639) Dies scheint wie eine gemeinsame Sache.


1
2018-03-26 13:32



Nur für den Fall, dass jemand anders in die gleiche Situation kommt wie ich gestern (22.06.2016) und auch mit den bereits geposteten Ansätzen nicht erfolgreich ist - weiter Lubuntu 14.04 Es funktionierte für mich mit der folgenden Befehlskette:

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

1
2018-06-23 14:30



Diese Antwort von Askubuntu ist, was für mich funktionierte. Scheint einfacher als andere Optionen und weniger fehleranfällig, da es Paket verwendet libgtest-dev um die Quellen und Builds von dort zu bekommen: https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top

Bitte beachten Sie diese Antwort, aber wie eine Abkürzung stelle ich auch hier die Schritte zur Verfügung:

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/

Danach konnte ich mein Projekt aufbauen, von dem ich abhängig bin gtest ohne Probleme.


1
2017-12-24 07:09



Dies wird Google Test und Mock-Bibliothek in Ubuntu / Debian-basierten System installieren:

sudo apt-get install google-mock

Getestet in Google Cloud im Debian-basierten Image.


0
2017-11-11 22:42



Dadurch werden sowohl gtest als auch gmock 1.7.0 erstellt und installiert:

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
2018-01-04 10:50