2017-05-05 1 views
0

Je suis en train de compiler exemple simple gmock sur mon ubuntu vmware (16.04 LTS)/usr/bin/ld: ne peut pas trouver -lgmock sur ubuntu lors de l'exécution programme gmock

et obtenir en dessous de l'erreur tout en faisant "make"

J'ai ci-dessous les fichiers -

"test.h"

class CBasicMath 
{ 
public: 
    CBasicMath(){} 
    virtual ~CBasicMath() {} 
    virtual int Addition(int x, int y); 
    virtual int Multiply(int x, int y); 
    virtual int Divide(int x, int y); 
}; 

"test.cpp"

#include "test.h" 

int CBasicMath::Addition(int x, int y) 
{ 
    return (x + y); 
} 

int CBasicMath::Multiply(int x, int y) 
{ 
    return (x * y); 
} 

int CBasicMath::Divide(int x, int y) 
{ 
    return (x/y); 
} 

"mocktest.h"

#include "gmock/gmock.h" 
#include "test.cpp" 

class MockBasicTest : public CBasicMath { 
public: 
    MOCK_METHOD2(Addition, int(int x, int y)); 
    MOCK_METHOD2(Multiply, int(int x, int y)); 
    MOCK_METHOD2(Divide, int(int x, int y)); 
}; 

"main.cpp"

#include "mocktest.h" 
#include "gtest/gtest.h" 
#include "gmock/gmock.h" 

TEST(BasicMathTest, testAddition) { 
    MockBasicTest basictest; 
    EXPECT_CALL(basictest, Addition(2,3)).Times(0); 

// EXPECT_EQ(0, basictest.Addition(2,3)); 
/* 
     .Times(5); 
    EXPECT_EQ(0,basictest.Addition(2,3)); 
    EXPECT_EQ(0,basictest.Addition(2,3)); 
    EXPECT_EQ(0,basictest.Addition(2,3)); 
    EXPECT_EQ(0,basictest.Addition(2,3)); 
    EXPECT_EQ(0,basictest.Addition(2,3)); 
*/ 
} 


int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

"CMakeLists.txt"

cmake_minimum_required(VERSION 2.6) 

    # Locate GTest 
    find_package(GTest REQUIRED) 
    include_directories(${GTEST_INCLUDE_DIRS}) 

    # Link runTests with what we want to test and the GTest and pthread library 
    add_executable(runTests main.cpp) 
    target_link_libraries(runTests -lgtest -lgmock -lpthread) 

Ce sont les étapes que je suivais pour la compilation -

[email protected]:~/Desktop/for_gtest/ajay/gtest/ajay/demo/gmock/simple_demo$ cmake CMakeLists.txt 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/ajay/Desktop/for_gtest/ajay/gtest/ajay/demo/gmock/simple_demo 
[email protected]:~/Desktop/for_gtest/ajay/gtest/ajay/demo/gmock/simple_demo$ 

et après que quand je ne fais que je suis confronté à la question

[email protected]:~/Desktop/for_gtest/ajay/gtest/ajay/demo/gmock/simple_demo$ make 
Scanning dependencies of target runTests 
make[2]: Warning: File 'main.cpp' has modification time 84978 s in the future 
[ 50%] Building CXX object CMakeFiles/runTests.dir/main.cpp.o 
[100%] Linking CXX executable runTests 
/usr/bin/ld: cannot find -lgmock 
collect2: error: ld returned 1 exit status 
CMakeFiles/runTests.dir/build.make:94: recipe for target 'runTests' failed 
make[2]: *** [runTests] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/runTests.dir/all' failed 
make[1]: *** [CMakeFiles/runTests.dir/all] Error 2 
Makefile:83: recipe for target 'all' failed 
make: *** [all] Error 2 
[email protected]:~/Desktop/for_gtest/ajay/gtest/ajay/demo/gmock/simple_demo$ 

Je ne sais pas pourquoi cela «/usr/bin/ld: ne peut pas trouver -lgmock » problème vient même si j'ai installé gmock avec succès. Je suis capable d'exécuter des programmes gtest mais quand j'ajoute gmock je reçois ce problème.

S'il vous plaît aidez-moi à résoudre. Faites-moi savoir pour plus d'informations.

+1

Pouvez-vous afficher la ligne exacte utilisée pour l'édition de liens (make VERBOSE = 1)? –

+0

Quelle ligne? Je suppose que j'ai ajouté tous les fichiers et les lignes utilisées pour compiler le code. Pouvez-vous s'il vous plaît m'aider à comprendre ce que vous cherchez et j'ai raté – user2564083

Répondre

1

Consultez la documentation de taget_link_libraries. Vérifiez les commentaires dans FindGtest.cmake

Vous ne devez pas spécifier les bibliothèques avec -l à la place utiliser les variables de find_package, par exemple. Vous n'avez pas fait find_package pour GMOCK, donc il n'y a pas de variables définies pour GMOCK. MAIS, la documentation de test de Google recommande de ne pas utiliser les bibliothèques installées du système, mais de les construire vous-même à l'intérieur de votre projet.Il existe plusieurs Exemples sur Internet comment ajouter gtest/gmock en tant que ExternalProject à votre projet cmake.

+0

Je n'ai pas compris ce que vous avez écrit. Je suis très nouveau à google test. Pouvez-vous s'il vous plaît m'aider à comprendre plus ou s'il vous plaît écrire en détail et m'aider. Merci d'avance ! – user2564083