it-swarm.com.de

So richten Sie googleTest als gemeinsam genutzte Bibliothek unter Linux ein

Debian stellt für gTest keine vorkompilierten Pakete mehr zur Verfügung. Sie schlagen vor, das Framework in das Makefile Ihrer Projekte zu integrieren. Aber ich möchte meine make-Datei sauber halten. Wie stelle ich gTest wie die vorherigen Versionen (<1.6.0) ein, damit ich die Bibliothek erneut verknüpfen kann?

78
ManuelSchneid3r

Bevor Sie beginnen, stellen Sie sicher, dass Sie diesen Hinweis von Google gelesen und verstanden haben ! Dieses Tutorial macht die Verwendung von gtest einfach, kann aber böse Fehler einführen.

1. Holen Sie sich das Googletest-Framework

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

Oder holen Sie es von hand . Ich werde dieses kleine How-to nicht beibehalten. Wenn Sie also darauf gestoßen sind und die Links veraltet sind, können Sie es jederzeit bearbeiten.

2. Packen Sie den Google-Test aus und erstellen Sie ihn

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 Libs auf Ihrem System.

Dieser Schritt kann sich von Distribution zu Distribution unterscheiden. Stellen Sie daher sicher, dass Sie die Header und Libs in das richtige Verzeichnis kopieren. Dies gelang mir, indem ich überprüfte, wo Debians frühere gtest-Bibliotheken lagen. Aber ich bin sicher, dass es bessere Wege gibt, 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üfen Sie, ob der Linker GNU 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. Vergessen Sie nicht, Ihr Projekt mit der Bibliothek zu verknüpfen, indem Sie -lgtest als Linker-Flag und optional das explizite -lgtest_main-Flag setzen, falls Sie keine eigene Test-Hauptroutine geschrieben haben.

Von hier aus können Sie unter Googles Dokumentation über das Framework nachschauen, wie es funktioniert. Viel Spaß beim Codieren!

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

128
ManuelSchneid3r

Lassen Sie mich dies speziell für Ubuntu-Benutzer beantworten .. __ Zuerst müssen Sie das gtest-Entwicklungspaket installieren.

Sudo apt-get install libgtest-dev

Beachten Sie, dass dieses Paket nur Quelldateien installiert. Sie müssen den Code selbst kompilieren, um die erforderlichen Bibliotheksdateien zu erstellen. Diese Quelldateien sollten sich unter/usr/src/gtest befinden. Navigieren Sie zu diesem Ordner und kompilieren Sie die Bibliothek mit 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

Um Ihre Programme, die gtest verwenden, zu kompilieren, müssen Sie es mit folgendem verknüpfen:

-lgtest -lgtest_main

Dies hat für Ubuntu 14.04LTS perfekt funktioniert.

24
amritkrs

Ich habe eine Weile gebraucht, um das herauszufinden, weil das normale "make install" entfernt wurde und ich nicht cmake benutze. Hier ist meine Erfahrung zu teilen. Bei der Arbeit habe ich unter Linux keinen Root-Zugriff. Daher habe ich das Google Test-Framework in meinem Heimatverzeichnis installiert: ~/usr/gtest/.

So installieren Sie das Paket in ~/usr/gtest/als gemeinsam genutzte Bibliotheken zusammen mit 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 zur Überprüfung der Installation die folgende test.c als einfaches Testbeispiel:

    #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
user3061373

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

Dies vermeidet, dass Sie gtest-Quellcode in Ihrem Repository aufbewahren oder an einer beliebigen Stelle installieren müssen. Es wird automatisch heruntergeladen und in Ihren Build-Baum eingebaut.

7
Fraser

Ich war in ähnlicher Weise von dieser Situation nicht so begeistert und stellte am Ende meine eigenen Ubuntu-Quellpakete her. Mit diesen Quellpaketen können Sie problemlos ein Binärpaket erstellen. Sie basieren auf der neuesten gtest & gmock-Quelle ab diesem Beitrag.

Google Test-DEB-Quellpaket

Google Mock DEB-Quellpaket

So erstellen Sie das Binärpaket:

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

Möglicherweise müssen Sie einige erforderliche Pakete benötigen. In diesem Fall müssen Sie sie lediglich mit apt-get installieren. __ Abgesehen davon sollten sich die erstellten .deb-Binärpakete dann im übergeordneten Verzeichnis befinden.

Für GMock ist der Prozess derselbe.

Stellen Sie als Nebenbemerkung sicher, dass gtest zuerst enthalten ist, wenn Sie gtest mit Ihrem Unit-Test verknüpfen ( https://bbs.archlinux.org/viewtopic.php?id=156639 ). Dies scheint eine gewöhnliche gotcha zu sein.

1
Nick Weedon

Nur für den Fall, dass sich jemand anderes in der gleichen Situation wie ich gestern befand (2016-06-22) und auch mit den bereits veröffentlichten Ansätzen nicht erfolgreich ist - auf Lubuntu 14.04 hat es für mich mit der folgenden Befehlskette funktioniert:

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
Tobias Hermann

Diese Antwort von askubuntu hat bei mir funktioniert. Scheint einfacher als andere Optionen als weniger fehleranfällig, da das Paket libgtest-dev verwendet wird, um die Quellen und Builds von dort abzurufen: https://askubuntu.com/questions/145887/why-no-library-files-installed-for -google-test? replyertab = Stimmen # tab-top

Bitte beziehen Sie sich auf diese Antwort, aber nur als Abkürzung gebe ich die Schritte auch hier an:

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, das von gtest abhängt, ohne Probleme erstellen.

1
jotadepicas

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
Bl00dh0und

Dadurch wird die Google Test- und Mock-Bibliothek in Ubuntu/Debian-basierten Systemen installiert:

Sudo apt-get install google-mock

Getestet in Google Cloud in einem Debian-basierten Image.

0

Die folgende Methode vermeidet das manuelle Durchsuchen des Verzeichnisses /usr/lib, erfordert jedoch nur minimale Änderungen in Ihrer Datei CMakeLists.txt. Außerdem kann Ihr Paketmanager libgtest-dev sauber deinstallieren.

Die Idee ist, dass, wenn Sie das libgtest-dev -Paket über erhalten

Sudo apt install libgtest-dev

Die Quelle ist in Position /usr/src/googletest gespeichert.

Sie können einfach Ihren CMakeLists.txt auf dieses Verzeichnis verweisen, damit es die erforderlichen Abhängigkeiten findet

Ersetzen Sie einfach FindGTest durch add_subdirectory(/usr/src/googletest gtest)

Am Ende sollte es so aussehen

add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
0
Rufus

Für 1.8.1 basierend auf @ ManuelSchneid3rs Antwort Musste ich Folgendes tun:

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

Ich habe dann make install gemacht, was für 1.8.1 zu funktionieren schien.

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