web-dev-qa-db-fra.com

Comment configurer googleTest en tant que bibliothèque partagée sous Linux

Debian ne fournit plus de paquets précompilés pour gTest. Ils vous suggèrent d'intégrer le cadre dans votre makefile de projets. Mais je veux garder mon fichier make propre. Comment configurer gTest comme les versions précédentes (<1.6.0), afin de pouvoir lier une bibliothèque à la bibliothèque?

78
ManuelSchneid3r

Avant de commencer, assurez-vous d'avoir lu et compris cette note de Google ! Ce tutoriel facilite l'utilisation de gtest, mais peut introduire méchants bugs .

1. Obtenez le framework googletest

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

Ou l'obtenir par hand . Je ne maintiendrai pas ce petit guide pratique, donc si vous tombez sur lui et que les liens sont obsolètes, n'hésitez pas à le modifier.

2. Décompressez et construisez google test

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

3. "Installez" les en-têtes et les bibliothèques sur votre système.

Cette étape peut différer d’une distribution à l’autre, assurez-vous donc de copier les en-têtes et les bibliothèques dans le bon répertoire. J'ai accompli ceci en vérifiant où les anciennes bibliothèques Debian de Debian étaient situées. Mais je suis sûr qu'il existe de meilleures façons de le faire. Remarque: make install est dangereux et n'est pas pris en charge.

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

4. Mettre à jour le cache de l'éditeur de liens

... et vérifiez si le GNU Linker connaît les libs

$ Sudo ldconfig -v | grep gtest

Si le résultat ressemble à ceci:

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

, tout va bien.

gTestframework est maintenant prêt à être utilisé. N'oubliez pas de lier votre projet à la bibliothèque en définissant -lgtest comme indicateur de l'éditeur de liens et, éventuellement, si vous n'avez pas écrit votre propre routine principale de test, l'indicateur explicite -lgtest_main.

A partir de là, vous voudrez peut-être consulter Googles documentation à propos du framework pour savoir comment il fonctionne. Bonne codage!

Edit: Cela fonctionne aussi pour OS X! Voir "Comment configurer correctement googleTest sur OS X"

128
ManuelSchneid3r

Permettez-moi de répondre à cette question en particulier pour les utilisateurs d'ubuntu… .. Commençons par installer le paquet de développement gtest.

Sudo apt-get install libgtest-dev

Notez que ce paquet installe uniquement les fichiers source. Vous devez compiler le code vous-même pour créer les fichiers de bibliothèque nécessaires. Ces fichiers sources doivent être situés dans/usr/src/gtest. Accédez à ce dossier et utilisez cmake pour compiler la bibliothèque:

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

Maintenant, pour compiler vos programmes qui utilisent gtest, vous devez le lier avec:

-lgtest -lgtest_main

Cela a fonctionné parfaitement pour moi sur Ubuntu 14.04LTS.

24
amritkrs

Il m'a fallu un certain temps pour comprendre cela, car le "make install" normal a été supprimé et je n'utilise pas cmake. Voici mon expérience à partager. Au travail, je n’ai pas d’accès root sur Linux. J’ai donc installé le framework de test Google sous mon répertoire personnel: ~/usr/gtest/.

Pour installer le paquet dans ~/usr/gtest/en tant que bibliothèques partagées, avec également un exemple de construction:

$ 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

Pour valider l'installation, utilisez le fichier test.c suivant comme exemple de test simple:

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

Compiler:

    $ 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

Si vous utilisez CMake, vous pouvez utiliser ExternalProject_Add tel que décrit ici .

Cela vous évite d'avoir à garder le code source de gtest dans votre référentiel ou à l'installer n'importe où. Il est téléchargé et intégré automatiquement dans votre arbre de compilation.

7
Fraser

De la même manière, j'étais déçu par cette situation et j'ai fini par créer mes propres paquets source Ubuntu à cette fin. Ces paquets sources vous permettent de produire facilement un paquet binaire. Ils sont basés sur la dernière source de gtest & gmock de ce post.

Package Google Test DEB Source

Paquet Google Mock DEB Source

Pour construire le paquet binaire, procédez comme suit:

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

Cela vous indiquera peut-être que vous avez besoin de certains paquetages pré-requis, auquel cas il vous suffit d'installer apt-get pour les installer . En dehors de cela, les paquets binaires construits .deb devraient alors se trouver dans le répertoire parent.

Pour GMock, le processus est le même.

En remarque, bien que n'étant pas spécifique à mes paquets source, lors de la liaison de gtest à votre test unitaire, assurez-vous qu'il est d'abord inclus ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Cela semble être un piège commun.

1
Nick Weedon

Juste au cas où quelqu'un d'autre se retrouverait dans la même situation que moi hier (2016-06-22) et ne réussirait pas non plus avec les approches déjà publiées - sur Lubuntu 14.04, cela a fonctionné pour moi en utilisant la chaîne de commandes suivante:

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

Cette réponse de askubuntu est ce qui a fonctionné pour moi. Cela semble plus simple que d’autres options, moins sujet aux erreurs, car il utilise le paquetage libgtest-dev pour obtenir les sources et les compiler à partir de là: https://askubuntu.com/questions/145887/why-no-library-files-installed-for -google-test? answertab = votes # tab-top

Veuillez vous référer à cette réponse, mais à titre de raccourci, je donne également les étapes suivantes:

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/

Après cela, je pourrais construire mon projet qui dépend de gtest sans aucun problème.

1
jotadepicas

Cela construira et installera à la fois gtest et 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
Bl00dh0und

Cela installera google test and mock library dans les systèmes Ubuntu/Debian:

Sudo apt-get install google-mock

Testé sur Google Cloud dans une image basée sur Debian.

0
Shubham Chaudhary

La méthode suivante évite de manipuler manuellement le répertoire /usr/lib tout en demandant des modifications minimes dans votre fichier CMakeLists.txt. Cela permet également à votre gestionnaire de paquets de désinstaller proprement libgtest-dev.

L’idée est que lorsque vous recevez le package libgtest-dev via

Sudo apt install libgtest-dev

La source est stockée à l'emplacement /usr/src/googletest

Vous pouvez simplement pointer votre CMakeLists.txt vers ce répertoire afin qu'il puisse trouver les dépendances nécessaires

Remplacez simplement FindGTest par add_subdirectory(/usr/src/googletest gtest)

À la fin, cela devrait ressembler à ceci

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

Pour 1.8.1 sur la base de la réponse de @ ManuelSchneid3r, je devais faire:

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

J'ai ensuite fait make install qui semblait fonctionner pour 1.8.1, mais Après @ ManuelSchneid3r, cela voudrait dire:

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