编译OpenCV 2.0测试代码出现linker error链接错误该如何解决?
解决方案
1. 核心问题1:链接顺序错误
GCC链接器遵循从左到右的依赖解析规则:需要先放包含未定义符号的目标文件,再放提供符号实现的库文件。你当前的命令把libcv200.dll.a放在了.o目标文件前面,链接器扫描库的时候还不知道后续目标文件需要哪些符号,直接跳过了库的符号导出表,导致后续无法匹配到依赖。
2. 核心问题2:缺失必要依赖库
你只链接了libcv200.dll.a,但报错的符号分属不同的OpenCV组件:
- 基础内存操作、矩阵操作相关的
cvFree、cvError、cvCreateMat等在libcxcore200.dll.a中 - 窗口、摄像头读写相关的
cvNamedWindow、cvCreateCameraCapture等在libhighgui200.dll.a中
这些组件都需要一并链接。
修正后的编译命令
推荐直接一步完成编译链接,避免分开操作出错:
gcc intruder_detector.c -I C:\OpenCV2.0\include\opencv -L C:\OpenCV2.0\lib -lcv200 -lcxcore200 -lhighgui200 -o intruder_detector.exe
参数说明:
-L C:\OpenCV2.0\lib指定库文件搜索路径,无需手动把库文件拷贝到当前目录-l后跟库名,GCC会自动匹配前缀lib和后缀.dll.a
如果需要分开编译、链接:
- 编译生成目标文件:
gcc -c intruder_detector.c -I C:\OpenCV2.0\include\opencv -o intruder_detector.o
- 链接生成可执行文件:
gcc intruder_detector.o -L C:\OpenCV2.0\lib -lcv200 -lcxcore200 -lhighgui200 -o intruder_detector.exe
后续运行注意事项
生成exe后,需要把OpenCV 2.0对应的cv200.dll、cxcore200.dll、highgui200.dll放到exe同目录,或者将OpenCV的bin目录加入系统PATH,否则运行时会提示缺失dll。
内容的提问来源于stack exchange,提问作者Yousef Ali
相关产品推荐
相关产品推荐

