Pregunta Cómo configurar googleTest como biblioteca compartida en Linux


Debian ya no proporciona ningún paquete precompilado para gTest. Sugieren que integre el marco en el archivo make de su proyecto. Pero quiero mantener mi archivo limpio. ¿Cómo configuro gTest como las versiones anteriores (<1.6.0), para poder enlazar una biblioteca?


76
2017-11-22 13:38


origen


Respuestas:


Antes de comenzar, asegúrese de haber leído y entendido esta nota de Google! Este tutorial facilita el uso de gtest, pero puede introducir errores desagradables.

1. Obtener el marco de googletest

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

O entiéndalo mano. No voy a mantener este pequeño tutorial, así que si se topa con él y los enlaces están desactualizados, siéntase libre de editarlo.

2. Desempaquetar y compilar la prueba de google

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

3. "Instala" los encabezados y libs en tu sistema.

Este paso puede diferir de la distribución a la distribución, por lo tanto, asegúrese de copiar los encabezados y libs en el directorio correcto. Lo logré comprobando dónde Debians ex gtest libs fueron localizados Pero estoy seguro de que hay mejores formas de hacer esto. Nota: make install es peligroso y no es compatible

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

4. Actualiza la caché del vinculador

... y comprueba si el enlazador GNU conoce las librerías

$ sudo ldconfig -v | grep gtest

Si el resultado es así:

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

, todo esta bien.

gTestframework ahora está listo para usar. No olvide vincular su proyecto a la biblioteca configurando -lgtest como indicador del enlazador y, opcionalmente, si no escribiste tu propia rutina de prueba, el explícito -lgtest_main bandera.

A partir de ahora es posible que desee ir a Google documentación sobre el marco para aprender cómo funciona. Feliz codificación!

Editar: ¡Esto también funciona para OS X! Ver "Cómo configurar adecuadamente googleTest en OS X"


125
2017-11-22 13:38



Me tomó un tiempo darme cuenta de esto porque la "instalación normal" normal se ha eliminado y no uso cmake. Aquí está mi experiencia para compartir. En el trabajo, no tengo acceso de root en Linux, así que instalé el marco de prueba de Google en mi directorio de inicio: ~/usr/gtest/.

Para instalar el paquete en ~ / usr / gtest / como bibliotecas compartidas, junto con la compilación de muestra:

$ 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

Para validar la instalación, use la siguiente prueba.c como un ejemplo de prueba 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();
    }

Compilar:

    $ 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



Déjame responder esto específicamente para usuarios de ubuntu. Primero, instale el paquete de desarrollo gtest.

sudo apt-get install libgtest-dev

Tenga en cuenta que este paquete solo instala archivos fuente. Debe compilar el código usted mismo para crear los archivos de biblioteca necesarios. Estos archivos fuente deben estar ubicados en / usr / src / gtest. Busque esta carpeta y use cmake para compilar la biblioteca:

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

Ahora para compilar sus programas que usan gtest, debe vincularlo con:

-lgtest -lgtest_main

Esto funcionó perfectamente para mí en Ubuntu 14.04LTS.


16
2018-01-31 09:43



Si está usando CMake, puede usar ExternalProject_Add como se describe aquí.

Esto evita tener que mantener el código fuente de Gtest en su repositorio o instalarlo en cualquier lugar. Se descarga y se construye en su árbol de compilación de forma automática.


7
2017-11-22 13:51



Esta situación me decepcionó de manera similar y terminé creando mis propios paquetes fuente de Ubuntu para esto. Estos paquetes fuente le permiten producir fácilmente un paquete binario. Se basan en la última fuente de gtest & gmock a partir de esta publicación.

Paquete de prueba Google DEB Source

Paquete de origen de Google Mock DEB

Para construir el paquete binario haz esto:

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

Puede decirte que necesitas algunos paquetes de requisitos previos, en cuyo caso solo necesitas instalarlos. Aparte de eso, los paquetes binarios .deb construidos deberían estar sentados en el directorio padre.

Para GMock, el proceso es el mismo.

Como nota al margen, aunque no es específico para mis paquetes fuente, al vincular gtest a su prueba de unidad, asegúrese de que primero se incluya gtest (https://bbs.archlinux.org/viewtopic.php?id=156639) Esto parece un gotcha común.


1
2018-03-26 13:32



En caso de que alguien más se ponga en la misma situación que yo ayer (2016-06-22) y tampoco tenga éxito con los enfoques ya publicados - en Lubuntu 14.04 funcionó para mí usando la siguiente cadena de comandos:

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



Esta respuesta de askubuntu es lo que funcionó para mí. Parece más simple que otras opciones y menos propenso a errores, ya que usa el paquete libgtest-dev para obtener las fuentes y las construcciones desde allí: https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top

Por favor refiérase a esa respuesta, pero solo como un atajo también proporciono los pasos aquí:

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/

Después de eso, podría construir mi proyecto, que depende de gtest sin problemas


1
2017-12-24 07:09



Esto instalará la prueba de google y la biblioteca falsa en el sistema Ubuntu / Debian:

sudo apt-get install google-mock

Probado en Google Cloud en una imagen basada en Debian.


0
2017-11-11 22:42