C库调用出现‘undefined reference to `test`’错误的原因排查求助
解决Code::Blocks中调用自定义库时的"undefined reference"错误
出现undefined reference to 'test'是因为链接器找不到test函数的实现代码,以下是具体排查和解决步骤:
给调用程序项目添加库依赖
打开你的C程序项目(tregpol.c所在项目),右键项目选择「Build options」:- 切换到「Linker settings」标签页
- 点击「Add」按钮,选中同目录下的
.a静态库文件(如果是动态库则选对应的导入库) - 若使用动态库,还要确保
.dll文件放在程序输出目录或系统可搜索路径中,否则运行时会找不到库
检查库的函数导出配置
- 查看
.def文件,确认已正确导出test函数,格式如下:EXPORTS test - 也可以通过代码声明控制导出/导入,修改
optim.h:#ifndef OPTIM_H_INCLUDED #define OPTIM_H_INCLUDED #ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif DLL_EXPORT void test(); #endif // OPTIM_H_INCLUDED - 编译库项目时,在「Build options」的「Compiler settings」->「#defines」中添加
BUILD_DLL,确保函数被正确导出
- 查看
统一编译架构
确认库项目和调用程序项目的编译架构一致(同为32位或64位),可以通过Code::Blocks工具栏的架构选择下拉框(如Win32/x86、x64)快速检查补充:修复库文件的编译警告
optim.c中使用printf但未包含头文件,建议添加#include <stdio.h>,避免编译库时出现警告:#include "optim.h" #include <stdio.h> void test() { printf("It works!"); }
内容的提问来源于stack exchange,提问作者Bogdan Doicin
相关产品推荐
相关产品推荐

