c++ - Cómo configurar googleTest como biblioteca compartida en Linux
google test (9)
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?
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 hand . 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 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 documentation Google sobre el marco para aprender cómo funciona. Feliz codificación!
Editar: ¡ Esto también funciona para OS X! Consulte "Cómo configurar adecuadamente googleTest en OS X"
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.
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 fuentes y compilaciones 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.
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.
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
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.
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 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
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
Si está utilizando CMake, puede usar ExternalProject_Add
como se describe here .
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.