【发布时间】:2016-08-29 13:49:17
【问题描述】:
当我尝试构建 googletest(和 googlemock)1.8.0 时,当我尝试与 libgtest.a 链接时,我得到了对 MakeAndRegisterTestInfo 的未定义引用。它适用于具有相同 cmake/make 设置的 1.7.0 版。我想我可以使用 1.7.0 但我需要单独下载和构建 gmock。
CMakeFiles/unittest.dir/test/test_led.cpp.o: In function `__static_initialization_and_destruction_0(int, int)':
test_led.cpp:(.text+0x23d): undefined reference to `testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/unittest] Error 1
make[1]: *** [CMakeFiles/unittest.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
libgtest.a 中的其他符号可以正常工作(例如 ::testing::InitGoogleTest),但是当我尝试使用宏 TEST_F 添加测试时,我会收到此错误。
这是我的测试用例设置:
#include "gtest/gtest.h"
namespace {
// The fixture for testing (used by TEST_F).
class Foo : public ::testing::Test {
protected:
Foo();
virtual ~Foo() {};
virtual void SetUp();
virtual void TearDown();
};
Foo::Foo() {
};
void Foo::SetUp()
{
};
void Foo::TearDown()
{
};
TEST_F(Foo, Init) {
};
} // namespace
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
int ret = RUN_ALL_TESTS();
return ret;
}
Cmake 谷歌测试sn-p: 它从本地文件夹下载。它构建,我得到一个 libgtest.a 文件。
### Unit test ###
# Google test
ExternalProject_Add(EXT_googletest
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
DOWNLOAD_COMMAND ""
SOURCE_DIR ${CMAKE_SOURCE_DIR}/../external/googletest
BUILD_COMMAND make all
# Disable install step
INSTALL_COMMAND "")
# Create a libgtest target to be used as a dependency by test programs
set(LIBGTEST_STATIC ${CMAKE_CURRENT_BINARY_DIR}/.../googlemock/gtest/libgtest.a)
add_executable(unittest
"test/test_foo.cpp")
target_link_libraries(unittest main_app_lib
${LIBGTEST_STATIC}
${CMAKE_THREAD_LIBS_INIT})
NM 输出 libgtest.a 1.8.0
user@system$ nm .../libgtest.a |grep MakeAndRegisterTestInfo
000000000000743a T _ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_NS0_12CodeLocationEPKvPFvvES7_PNS0_15TestFactoryBaseE
NM 输出 libgtest.a 1.7.0(工作文件)
user@system$ nm .../libgtest.a |grep MakeAndRegisterTestInfo
0000000000005968 T _ZN7testing8internal23MakeAndRegisterTestInfoEPKcS2_S2_S2_PKvPFvvES6_PNS0_15TestFactoryBaseE
已解决:
在构建机器上安装了一个旧版本的 google 测试,cmake 使用了这些标头。
【问题讨论】:
-
你做过
make clean吗? -
我最近遇到了这个错误信息,这是因为我最近升级了 gtest 后没有在我的项目上运行
make clean。
标签: makefile cmake static-libraries googletest