Windows10+VS2017+C+++OpenCV环境下创建FisherFaceRecognizer报未解析外部符号原因
解决OpenCV中FisherFaceRecognizer未解析外部符号问题
兄弟,我之前也踩过这个一模一样的坑!你说的这个未解析外部符号问题,核心原因基本是OpenCV的face模块(属于opencv_contrib扩展库)的链接配置没到位——毕竟FisherFaceRecognizer不是OpenCV主库自带的功能,咱们一步步排查解决:
可能的原因及解决步骤
确认OpenCV是否包含opencv_contrib模块
FisherFaceRecognizer是opencv_contrib扩展库中face模块的类,如果你用的是OpenCV官方预编译包,默认是不带contrib的。要么去下载带contrib的预编译版本,要么自己编译OpenCV时勾选BUILD_opencv_face选项,把face模块编译进去。VS2017链接器配置补全
就算头文件路径配对了,链接器找不到对应的库文件还是会报错:- 打开项目属性 → 链接器 → 常规 → 附加库目录,确保添加了opencv_contrib的lib文件夹路径,比如
D:\opencv\opencv_contrib\x64\vc15\lib(vc15对应VS2017,路径根据你的实际安装位置调整) - 转到链接器 → 输入 → 附加依赖项,添加对应模式的face库:
- Release x64模式:加
opencv_face4xx.lib(xx是你的OpenCV版本号,比如455就是opencv_face455.lib) - Debug x64模式:加
opencv_face4xxd.lib(带d的是Debug版本库,别搞混!)
- Release x64模式:加
- 打开项目属性 → 链接器 → 常规 → 附加库目录,确保添加了opencv_contrib的lib文件夹路径,比如
代码命名空间与写法检查
确保代码里的命名空间引用正确,或者直接用全限定名避免冲突:// 要么保留你的命名空间 using namespace cv::face; Ptr<FisherFaceRecognizer> model = FisherFaceRecognizer::create(); // 要么用全限定名 cv::Ptr<cv::face::FisherFaceRecognizer> model = cv::face::FisherFaceRecognizer::create();编译模式完全匹配
你的项目的Debug/Release、x86/x64必须和OpenCV库的编译模式完全一致!比如你装的是x64版本的OpenCV,项目就不能设为x86,否则绝对会出现链接错误。
你的代码片段参考:
#include "opencv2\opencv.hpp" #include "opencv2\face.hpp" using namespace std; using namespace cv; using namespace face; int main() { Ptr<FisherFaceRecognizer> model ... }
内容的提问来源于stack exchange,提问作者Nathan Headley
相关产品推荐
相关产品推荐

