编译OpenCV 4.7.0 无法解析的外部符号 cv::xfeatures2d::VGG::getDefaultName 问题解决

在使用OpenCV4.7.0和opencv_contrib-4.7.0的xfeatures2d模块进行特征匹配时遇到编译错误LNK2001。原因是CMakeConfigure时从GitHub下载vgg_generated_48.i等文件失败。解决方案是手动从GitHub下载相关文件,放入指定build目录,重新配置并生成,然后在VS中成功编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做特征匹配,需要用到xfeatures2d中的特征,源码编译OpenCV 4.7.0及opencv_contrib-4.7.0中的xfeatures2d模块,在Visual Studio 2019中编译生成库时,有以下报错

严重性    代码    说明    项目    文件    行    禁止显示状态    禁止显示状态
错误    LNK2001    无法解析的外部符号 "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl cv::xfeatures2d::VGG::getDefaultName(void)const " (?getDefaultName@VGG@xfeatures2d@cv@@UEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)    

问题原因:

CMake Configure时,从GitHub上下载vgg_generated_48.i等文件失败。

解决方法:

我的build路径为D:\opencv-4.7.0\build,如下图所示

预先从GitHub上opencv_3rdparty下载文件,解压过后复制到D:\opencv-4.7.0\build\downloads\xfeatures2d目录下。如下图所示

 

 重新Configure和Generate,打开VS编译,问题解决。

### 解决编译 OpenCV 模块时报错的方法 当遇到 `LNK2001` 错误提示无法解析外部符号 `"public: virtual class std::basic_string<char,struct std::char_traits<class std::allocator > __cdecl cv::xfeatures2d::VGG::getDefaultName(void)const "` 时,这通常意味着链接器找不到该函数定义的位置。 #### 可能原因分析 此问题可能源于配置不正确或者某些必要的文件未被包含。具体来说: - 编译选项设置不当可能导致部分模块未能成功构建。 - 额外模块路径指定错误或版本不符也可能引发此类问题[^3]。 #### 解决策略 为了修复这个问题,可以尝试以下几种方式来调整CMake配置参数以及确保环境变量和依赖项都已正确定义: ##### 修改 CMakeLists.txt 文件 确认项目根目录下的 `CMakeLists.txt` 中包含了对额外模块的支持声明,并且指定了正确的路径指向 `opencv_contrib/modules/xfeatures2d/CMakeLists.txt` 文件所在位置[^1]。 ```cmake set(OPENCV_EXTRA_MODULES_PATH ${CMAKE_SOURCE_DIR}/opencv_contrib/modules) add_subdirectory(${OPENCV_EXTRA_MODULES_PATH}) ``` ##### 更新 CMake 构建命令 重新运行带有适当标志的 CMake 命令以确保所有必需组件都被考虑进去。特别是要保证启用了非自由算法支持并正确设置了安装前缀和其他必要属性。 ```bash cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/path/to/installation/folder \ -D OPENCV_EXTRA_MODULES_PATH=path_to_opencv_contrib/modules \ -D OPENCV_ENABLE_NONFREE=True \ path_to_opencv_source_folder ``` 请注意替换上述命令中的 `/path/to/installation/folder`, `path_to_opencv_contrib/modules` 和 `path_to_opencv_source_folder` 参数为你自己的实际路径。 ##### 清理旧缓存数据 有时残留的临时文件可能会干扰新的构建过程。建议先清理之前的构建产物再重试新配置后的编译操作。可以通过删除整个 build 文件夹实现这一点,之后再次执行 cmake .. && make 来完成全新一轮的构建流程。 通过以上措施应该能够有效解决由于缺少 VGG 类默认名称获取方法而导致的链接失败情况。如果仍然存在问题,则需进一步检查其他潜在因素如平台工具集兼容性等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值