老师给安排了一个任务,用到了一个第三方库,但这个第三方库比较老只有x86的版本,因此
vs的编译器使用了x86版本的。再调用我之前配好的opencv环境时,报了一堆关于opencv的未解析的外部符号
一种未解析的外部符号的原因和解决方式
原因:解释器和opencv库不对应
①如,使用的是opencv x64库,而vs的编译器却使用的x86版本的)
②如,使用的是opencv release版本的库,而vs的解决方案配置的是debug
解决方式:修改vs的编译器的位数和opencv一致(如果你opencv的库的路劲是在这个文件下就是x64版本的)
如,我再VS下配置的“属性管理器/VC++目录/库目录”中使用的路径是“D:\Program\opencv\build\x64\vc15\lib”,是在x64目录下,所以我是用的opencv是64位的
这时需要在VS中将x86改为x64
如果解决方案配置是Debug对应使用opecv_worldxxxd.lib,
Release对应使用opencv_worldxxx.lib
OpeCV目录下没有x86(32位)的版本的解决方式
现在从opencv官网下的windows包里面只有x64的,因此需要32位的需要自己编译
使用工具CMake, VS
CMake工具下载Download | CMake
选择cmake-3.26.0-rc4-windows-x86_64.zip
下载好之后解压后,添加bin目录到系统变量:如,D:\cmake\cmake-3.26.0-windows-x86_64\bin
打开CMake
选择源码路径和build路径(build路径是需要自己新建的,选择合适的位置即可)
我的build目录(x86build文件夹)是在opencv路径下新建的
选择好之后点击configure
点击configure之后的选项
选择生成win32,不选的话默认是x64,要生成32位的一定要选,否则install的时候缺少x86选项
选好之后点击finish
等待configure,出现configure done, 之后将BUILD_opencv_world打上对勾,不然会缺少对应的库文件
最后generate,等待结束后,显示generate done(我的图片是已经生成过的,所以下面显示configure done 和 generate done,不用看这个)
在刚才新建的build目录(我的是x86build)下找到OpenCV.sln打开
点击生成->批生成
选择install选项,生成之前注意平台和解决方案是否是你所需要的,如Win32还是x64,如果你需要32位的,但是没有对应选项,可能是之前点击configure时没有正确配置
勾选Debug,会生成opencv_worldxxxd.dll
勾选Release,会生成opencv_worldxxx.dll
如果你都需要可以都选上,我这里只需要debug版本的,就之选了一个
勾选后之后点击生成,时间会稍有点久
查看结果,等待生成结束后,到对应的目录下查看是否生成成功
路径为“.../build目录/install/x86/vc16/bin”和 “.../build目录/install/x86/vc16/lib”
我的结果如下
这样,windows下x86版本的opencv便安装好了,之后接下里就是在VS中配置OpenCV 32位的环境
添加环境变量和动态库文件
①添加的bin目录需要时自己生成x86版本下的
②添加动态库文件
以32位为例,我需要的时debug版本的
找到“....\opencv\x86build\install\x86\vc16\bin”目录下的opencv_world450d.dll文件并复制
将文件复制到C:\Windows\System32目录下(32位release版本的opencv_world450.dll也是在这个目录下)
如果你的是x64版本的,则应该添加到C:\Windows\SysWOW64目录下(64位release版本的opencv_world450.dll也是在这个目录下)
打开自己的VS项目文件,选择项目->属性
①添加VC++目录->包含目录,添加内容如图(记得修改成自己的路径,别直接填我的)
②添加VC++目录->库目录,
③添加链接器->输入->外部依赖项
注意对应debug版本(opencv_worldxxxd.lib)和release版本(opencv_worldxxx.lib)
点击确定,就配置好了