Como instalar o google-mock no Ubuntu 12.10

4

Estou com dificuldades para instalar o Google C ++ Mocking Framework. Eu executei com sucesso sudo apt-get install google-mock . Então eu tentei compilar este arquivo de exemplo

#include "gmock/gmock.h"
int main(int argc, char** argv) {
  ::testing::InitGoogleMock(&argc, argv);
  return RUN_ALL_TESTS();
}

com g++ -lgmock main.cpp e esses erros mostraram

main.cpp:(.text+0x1e): undefined reference to 'testing::InitGoogleMock(int*, char**)'
main.cpp:(.text+0x23): undefined reference to 'testing::UnitTest::GetInstance()'
main.cpp:(.text+0x2b): undefined reference to 'testing::UnitTest::Run()'
collect2: error: ld returned 1 exit status

Eu acho que o linker não pode encontrar os arquivos da biblioteca. Alguém sabe como consertar isso?

    
por Slazer 19.11.2012 / 23:36

3 respostas

7

OK, agora comecei a usar o gmock com sucesso construindo minha própria versão de acordo com o README fornecido com o download do site do projeto googlemock.

Obtenha o zip de download do site: link

Descompacte-o em um diretório, diga ${GMOCK_ROOT} . Então, conforme as instruções do README :

cd ${GMOCK_ROOT}
mkdir build
cd build
g++ -I../gtest/include -I../gtest -I../include -I.. -c ../gtest/src/gtest-all.cc
g++ -I../gtest/include -I../gtest -I../include -I.. -c ../src/gmock-all.cc
ar -rv libgmock.a gtest-all.o gmock-all.o

Assim você tem seu próprio libgmock.a em ${GMOCK_ROOT}/build . Você também precisa de pthreads para compilar, então seu comando de compilação depois disso se torna:

g++ -I${GMOCK_ROOT}/include/ main.cpp -L${GMOCK_ROOT}/build -lgmock -lpthread
    
por Pavel 21.11.2012 / 12:37
2

Para contextualizar a resposta de Pavel, o binário compilado do Google Mock não é distribuído com o pacote do Ubuntu por causa do motivo dado aqui . Essa explicação é para o Google Test, mas o princípio se aplica a qualquer biblioteca C ++.

Especificamente, diz:

  

Nos primeiros dias, dissemos que você poderia instalar o Google Test compilado   bibliotecas em sistemas * nix usando make install. Então, todo usuário do seu   máquina pode gravar testes sem recompilar o teste do Google.

     

Isso pareceu uma boa ideia, mas tem um jeito: todo usuário precisa   para compilar seus testes usando os mesmos sinalizadores de compilador usados para compilar o   instalou bibliotecas de teste do Google; caso contrário, ele pode correr em indefinido   comportamentos (ou seja, os testes podem se comportar de maneira estranha e   não há razões óbvias).

     

Por quê? Porque C ++ tem essa coisa chamada Regra de Uma Definição: se dois   Os arquivos de origem C ++ contêm diferentes definições do mesmo   classe / função / variável, e você ligá-los juntos, você violar o   regra. O linker pode ou não pegar o erro (em muitos casos é   não é exigido pelo padrão C ++ para capturar a violação). Se isso   não, você tem comportamentos estranhos em tempo de execução que são inesperados e   difícil de depurar.

     

Se você compilar o Google Test e seu código de teste usando um compilador diferente   bandeiras, eles podem ver diferentes definições do mesmo   classe / função / variável (por exemplo, devido ao uso de #if no Google Test).   Portanto, para sua sanidade, recomendamos evitar a instalação   bibliotecas de teste do Google pré-compiladas. Em vez disso, cada projeto deve   compilar o Google Test em si de tal forma que pode ter certeza de que o mesmo   flags são usados para o Google Test e os testes.

Portanto, seu problema original foi que a instalação do pacote google-mock instalou apenas o código-fonte e, quando você tentou compilar seu aplicativo de exemplo, não foi possível encontrar nenhuma biblioteca do gmock.

    
por Chris Wilson 25.11.2012 / 15:58
0

libgmock-dev será incluído nos repositórios padrão do Ubuntu 18.10, caso contrário, em versões anteriores do Ubuntu você terá que baixar e instalar manualmente.

sudo apt-get install libgmock-dev
cd /usr/src/gmock
sudo mkdir build
sudo cmake ..
sudo make
sudo cp *.a /usr/lib
    
por Steephen 23.05.2018 / 18:40