使用自定义编译OpenCV库编译代码时遇未定义引用错误求助
解决OpenCV自定义编译库的g++链接错误问题
嗨,我来帮你排查这个问题——你遇到的undefined reference错误,核心原因是编译器ABI不兼容,具体来说:
问题根源
你当前使用的OpenCV库是用VC14(Visual Studio 2015)编译生成的,但你现在用g++(GCC/MinGW系列编译器)来编译自己的代码。VC和GCC的C++二进制接口(ABI)不兼容,导致链接阶段无法找到正确的函数实现,就出现了cv::VideoCapture相关的未定义引用错误。
解决方案
你有两个可行的方向来解决这个问题:
1. 用GCC/MinGW重新编译OpenCV库
这是最推荐的方案,确保库和你的编译环境匹配:
- 准备好OpenCV源码(如果之前是用预编译包,建议下载完整源码)
- 用CMake配置编译选项:
- 指定编译器为你的
g++/gcc路径 - 设置安装路径、架构(x64)、需要启用的模块等
- 确保生成的是MinGW/GCC兼容的Makefile
- 指定编译器为你的
- 执行
mingw32-make(或make)完成编译,再执行mingw32-make install安装库文件 - 之后编译你的代码时,链接新生成的GCC版库即可
2. 改用Visual Studio编译器编译你的代码
如果你不想重新编译OpenCV,可以放弃g++,改用Visual Studio的cl.exe编译器来编译你的代码,这样就能和VC14编译的OpenCV库兼容。
额外注意事项
- 不管用哪种方案,编译时不要同时混合链接Debug(带
d后缀)和Release(无后缀)版本的库,选其中一套即可(比如Debug模式只链带d的库) - 编译完成后,要把OpenCV的
bin目录添加到系统PATH环境变量中,否则运行程序时会找不到动态链接库
内容的提问来源于stack exchange,提问作者kmes40505
相关产品推荐
相关产品推荐

