gmock/gtest 在编译代码时给出错误

问题描述 投票:0回答:3

我是 gtest/gmock 的新手。我正在尝试为 C++ 程序实施单元测试。但是当我尝试编译它时。我遇到了与 gmock 的链接错误。这个特定的错误是相关的

testing::internal::GetCurrentOsStackTraceExceptTop
.

gtest/gmock的安装:
第 1 步:

sudo apt-get install libgtest-dev

第 2 步:从这里下载 google test 的 git repo:https://github.com/google/googletest
第三步:sudo apt install cmake
第 4 步:运行这些命令 {~googletest$}

sudo cmake CMakeLists.txt  
sudo make 

第五步:复制/usr/lib中的文件
第 6 步:将 gtest/gmock include 文件夹复制到 /usr/local/include

 version of the Google Test library that is installed on my system is 1.10.0-2. 

test.cpp

#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <gmock/gmock-actions.h>
#include <iostream>
#include "timeEvent.h"

using ::testing::_;
using ::testing::Return;

class MockStat {
 public:
  MOCK_METHOD2(stat, int(const char* pathname, struct stat* buf));
};

TEST(MyTest, PositiveCase) {
  MockStat mock_stat;
  struct stat fileStat;
  fileStat.st_mtime = 111;
  fileStat.st_ctime = 222;
  
  EXPECT_CALL(mock_stat, stat("/var/lib/systemd/timesync/clock", &fileStat))
      .WillOnce(Return(0));
  
  auto latest_clock = get_latest_clock_entry();
  EXPECT_EQ(latest_clock.tv_sec, 111);
  EXPECT_EQ(latest_clock.tv_nsec, 0);
}

编译:

g++ test.cpp library.cpp -lgtest -lgtest_main -lpthread -lboost_thread -pthread -lboost_filesystem -lgtest -lgmock -lgmock_main

错误:

g++ update.cpp library.cpp -lgtest -lgtest_main -lpthread -lboost_thread -pthread -lboost_filesystem -lgtest -lgmock -lgmock_main -lstdc++
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/libgmock.a(gmock-all.cc.o): in function `testing::internal::Log(testing::internal::LogSeverity, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
gmock-all.cc:(.text+0x121a): undefined reference to `testing::internal::GetCurrentOsStackTraceExceptTop[abi:cxx11](int)'
collect2: error: ld returned 1 exit status
c++ unit-testing googletest googlemock
3个回答
1
投票

看起来您正在使用来自 2 个不同来源的 gmock/gtest 库。第一个来源是您安装的

libgtest-dev
,第二个是 github 存储库。您应该使用
libgtest-dev
或github repo中的那个。


1
投票

testing::internal::GetCurrentOsStackTraceExceptTop[abi:cxx11](int)
libgtest
中定义。
libgmock
取决于
libgtest
。因此
-lgtest
应该遵循
-lgmock

g++ update.cpp library.cpp -lboost_thread -pthread -lboost_filesystem -lgmock -lgtest -lgmock_main

不要将

-lstdc++
与 g++ 一起使用。这是默认的。正确的方法是
-stdlib=stdc++
.

请参阅为什么链接库的顺序有时会导致 GCC 出错? 以获取更多信息。你的问题可以被认为是一个骗局。


0
投票

同意Marcin Osypka

如果您使用手动安装的 github 存储库,请确保您没有安装

libgmock-dev
libgtest-dev

sudo apt-get remove libgtest-dev

解决了我的兼容性问题

© www.soinside.com 2019 - 2024. All rights reserved.