如何配置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
相关产品推荐
相关产品推荐

