Cómo configurar googleTest como biblioteca compartida en Linux

Debian ya no proporciona ningún paquete precomstackdo 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?

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 consíguelo a 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 comstackr 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 se encontraban las antiguas librerías de Debian . 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. Simplemente no olvide vincular su proyecto a la biblioteca estableciendo -lgtest como -lgtest enlazador y, opcionalmente, si no escribió su propia rutina de prueba, el -lgtest_main .

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

Editar: ¡ Esto también funciona para OS X! Consulte “Cómo configurar adecuadamente googleTest en OS X”

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 principal: ~/usr/gtest/ .

Para instalar el paquete en ~ / usr / gtest / como bibliotecas compartidas, junto con la comstackció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  TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); } 

Comstackr:

  $ 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 

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 comstackr 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 comstackr 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 comstackr sus progtwigs que usan gtest, debe vincularlo con:

 -lgtest -lgtest_main 

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

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

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

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 una gotcha común.

Por si acaso alguien más se pone en la misma situación que yo ayer (2016-06-22) y tampoco tiene é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 

Esta respuesta de askubuntu es lo que funcionó para mí. Parece más simple que otras opciones y es menos propenso a errores, ya que usa el paquete libgtest-dev para obtener las fonts y comstackciones desde allí: https://askubuntu.com/questions/145887/why-no-library-files-installed-for -google-test? answertab = votos # 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.

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.

Esto construirá e instalará tanto gtest como 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