2016-12-31 1 views
3

J'ai perdu beaucoup d'heures pour résoudre ce problème, mais sans succès. Au début, ma configuration: Ubuntu 16.04.1, qmake 3.0, cmake 3.5.1, bibliothèques gtest et gmock partagées, version 1.8.0. J'utilise Qt Creator, et c'est un petit exemple de programme minimal qui mène au béguin.Gtest et Gmock - double gratuit ou corruption

main.cpp:

#include <iostream> 
#include <gtest/gtest.h> 
#include <gmock/gmock.h> 

using namespace std; 

class A { 
    void print() { 
     std::cout << "PRINT" << std::endl; 
    } 
}; 

class B: public A { 
    MOCK_METHOD0(print, void()); 
}; 

TEST(MOCK, TEST) { 
    B b; 
} 

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

google_test.pro:

TEMPLATE = app 
CONFIG += console c++11 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp 

LIBS += -lgtest -lgmock 

Les tests sont OK, mais à la fin du programme je reçois cette erreur:

* Erreur dans `/home/aminought/QtProjects/build-google_test-Desktop_Qt_5_7_0_GCC_64bit-Debug/google_test ': double gratuit ou corruption (! prev): 0x0000000001a51270 *

Comment réparer cette erreur? Très ennuyant.

+0

J'ai exécuté votre code et je n'ai pas eu cette erreur. gtest 1.8.0.1, gmock 1.8.0.1, QMake version 3.0, Qt version 5.7.1, cmake 3.7.1.1 – eyllanesc

+0

Mise à niveau vers cmake 3.7.1 et g ++ 5.4.1. Maintenant l'erreur semble si: *** Erreur dans '/ home/aminought/QtProjects/build-google_test-Desktop_Qt_5_7_0_GCC_64bit-débogage/google_test ': libre(): pointeur invalide: 0x0000000001864fb0 *** – logumanov

+0

Je suis utiliser: g ++ (GCC) 6.2.1 20160830 – eyllanesc

Répondre

1

Ce problème se produit uniquement lorsque google test est compilé en tant que bibliothèques partagées. Je ne sais pas pourquoi, mais le simple remplacement des bibliothèques partagées en statique résout le problème.

+0

Cela ressemble à cela que les drapeaux de compilation étaient différents lorsque la bibliothèque a été construite. – Rudi

+0

Seulement -DBUILD_SHARED_LIBS = ON – logumanov