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

如何配置CMakeList实现正确链接,解决cmocka未定义引用报错

问题原因

出现undefined reference报错属于链接阶段符号未找到错误,由两处CMake配置错误导致:

  • 已声明的cmocka导入库未链接到测试可执行目标
  • cmocka导入库的属性配置错误

修正方案

1. 修正cmocka导入库属性

当前项目中cmocka头文件直接存放在include/根目录下,原配置中INTERFACE_INCLUDE_DIRECTORIES指向的../../include/cmocka路径不存在;同时Windows平台下动态库的导入库(.dll.a后缀)对应的属性为IMPORTED_IMPLIB,原配置误用了对应动态库本体的IMPORTED_LOCATION属性。

2. 补充链接声明

CMake不会自动将导入库关联到项目编译目标,需要显式声明链接关系。

修改后的完整CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.20)
project(jargon_test C)

set(CMAKE_C_STANDARD 11)

add_executable(jargon_test main.c token_tests.h token_tests.c)

include_directories(
        "../../src/jargon/"
        "../../include"
)

add_library(cmocka SHARED IMPORTED)
set_target_properties(cmocka
        PROPERTIES
        IMPORTED_IMPLIB "../../lib/libcmocka.dll.a"
        # 若存在libcmocka.dll,补充下一行指向dll实际路径
        # IMPORTED_LOCATION "../../lib/libcmocka.dll"
        INTERFACE_INCLUDE_DIRECTORIES "../../include"
)

# 新增链接配置
target_link_libraries(jargon_test PRIVATE cmocka)

后续注意事项

运行测试时若提示找不到cmocka.dll,将dll文件放到测试可执行文件的输出目录,或将dll所在目录加入系统PATH环境变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:03