2016-12-31 102 views
3

我已经浪费了很多小时来解决这个问题,但没有成功。起初,我的配置:Ubuntu 16.04.1,qmake 3.0,cmake 3.5.1,共享gtest和gmock库,版本1.8.0。我使用Qt Creator,这是导致迷恋的最小程序的一个小例子。Gtest和Gmock - 双重免费或腐败

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 

测试是确定的,但在节目的最后我得到这个错误:

*错误的`/home/aminought/QtProjects/build-google_test-Desktop_Qt_5_7_0_GCC_64bit-Debug/google_test':double free或corruption(!prev):0x0000000001a51270 *

如何解决此错误?很烦人。

+0

我已经执行了你的代码,我没有得到那个错误。 gtest 1.8.0.1,gmock 1.8.0.1,QMake 3.0版,Qt 5.7.1版,cmake 3.7.1.1 – eyllanesc

+0

升级到cmake 3.7.1和g ++ 5.4.1。现在的错误看起来是这样的: ***错误'/ home/aminought/QtProjects/build-google_test-Desktop_Qt_5_7_0_GCC_64bit-Debug/google_test':free():无效指针:0x0000000001864fb0 *** – logumanov

+0

我使用:g ++(GCC) 6.2.1 20160830 – eyllanesc

回答

1

只有谷歌测试编译为共享库才会出现此问题。我不知道为什么,但简单地将共享库替换为静态解决了这个问题。

+0

这听起来像编译标志在构建库时不同。 – Rudi

+0

只有-DBUILD_SHARED_LIBS = ON – logumanov