You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake构建含FFF的GoogleTest可执行文件时遇未定义引用错误

问题原因及解决方案

错误原因

链接器报错undefined reference to 'fff',核心原因是FFF框架的核心全局对象fff没有被编译进测试可执行文件。FFF是头文件驱动的假函数框架,它的实现代码(包括fff结构体实例)需要通过定义FFF_IMPLEMENTATION宏来触发生成,而你的代码中未完成这一步。

修复方法

两种可靠修复方式二选一即可:

方式一:在测试源文件中直接定义实现宏

修改module_tests.cpp,在包含fff.h前添加FFF_IMPLEMENTATION宏定义:

#include <gtest/gtest.h>

extern "C" {
#define FFF_IMPLEMENTATION  // 必须在包含fff.h前定义此宏
#include "fff.h"
FAKE_VALUE_FUNC(uint16_t, MODULEA_getSampleValue);
}

extern "C" {
#include "module_b.h"
}

// Tests written here

方式二:通过CMake全局配置实现宏

在CMakeLists.txt中给测试目标添加编译定义,确保FFF的实现代码被生成:

add_executable(module_test
    src/module_tests.cpp
)

# 添加此行,给测试目标定义FFF_IMPLEMENTATION宏
target_compile_definitions(module_test PRIVATE FFF_IMPLEMENTATION)

target_link_libraries(module_test
    PRIVATE
        gtest_main
        MODULE_A
        MODULE_B
)

target_include_directories(module_test
    PUBLIC
        ../inc
)

include(GoogleTest)
gtest_discover_tests(module_test)

注意:无论用哪种方式,FFF_IMPLEMENTATION只能被定义一次(要么在单个源文件中,要么通过CMake全局定义但仅在一个源文件中包含fff.h),否则会触发多重定义的链接错误。

内容的提问来源于stack exchange,提问作者upsidedownone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:03:23