CMake集成GTest构建时报Error running test executable Result:24错误求助
问题根因定位
这个报错是gtest_discover_tests的内置逻辑触发的:CMake在完成Test二进制构建后,会自动运行一次该程序来枚举所有测试用例,此时你的Test程序运行异常退出,返回码为24,因此CMake抛出构建错误。
当你移除SRC库链接时,业务代码没有被编入测试程序,测试程序可以正常运行返回0,错误就会消失。
排查与解决方案
第一步:复现程序运行错误
直接手动执行报错路径下的测试二进制文件:
/home/fengyuan/Desktop/a1835007/2021/s2/oop/practical-08-11/Tests/cmake-build-debug/Test
观察运行输出的错误信息,比如段错误、断言失败等提示,即可定位到业务代码的异常位置。
第二步:常见问题修复
90%以上的该类错误都是业务代码运行时异常导致,常见问题点:
- RoomFactory单例的初始化逻辑存在缺陷,比如懒汉实现线程不安全、初始化依赖的资源不存在直接终止程序
occupyAFreeRoom方法返回空指针,后续直接访问room->roomStatus触发空指针解引用崩溃- 全局对象的构造函数中存在崩溃逻辑,程序在进入gtest的main函数前就异常退出
第三步:构建阶段临时绕过方案
如果不需要在构建阶段自动发现测试用例,可以修改CMakeLists.txt中的测试配置:
删除gtest_discover_tests(Test) 行,替换为:
gtest_add_tests(TARGET Test SOURCES Tests.cpp)
该命令是静态解析测试代码来识别用例,不需要运行测试程序,即可避免构建阶段的报错,后续你可以单独运行测试程序调试业务问题。
第四步:编译一致性检查
确认SRC库和Test目标的编译配置一致:
- 两者的C++标准、编译选项、宏定义没有冲突
- 没有出现结构体对齐规则不一致、符号隐式声明等链接问题
内容的提问来源于stack exchange,提问作者Freddyy
相关产品推荐
相关产品推荐

