与OpenCV 3.0连接时出现“无法parsing的外部符号”错误
我从源代码构buildOpenCV 3.0。 和一些额外的模块contrib回购。 而我手动设置我的VS2013项目使用生成的lib文件。
我的代码现在很简单:
#include "opencv2\core\core.hpp" #include "opencv2\imgcodecs\imgcodecs.hpp" int _tmain(int argc, _TCHAR* argv[]) { cv::Mat image = cv::imread("img.jpg"); return 0; }
但是,在VS 2013社区版本中,它给了我这些错误:
我看到类似的线程 ,他们说这是由x86 / x64问题引起的。 但是我的项目已经是x86了。 而我build立的OpenCV也是针对x86(见下文)。 这是什么原因?
ADD 1
OpenCV 3.0 INSTALL
项目生成以下lib目录:
所以它确实是一个x86
。
我的libpathconfiguration为上面的path:
我添加了所有*d.lib
文件。
下面是我的VC项目的Configuration Manager
所以它确实也是x86
。
哪里可能出错?
ADD 2
我手动searchfastFree()
函数。 它在opencv_core300d.lib
文件中定义。 我使用dumpbin /symbols
命令来检查符号。 而且我发现它的名字正像fastFree@cv@@YAXPAX@Z
一样被fastFree@cv@@YAXPAX@Z
。 那为什么不能find?
在这里,使用带有预编译库的OpenCV 3.0.0,在Windows(用Windows 8.1testing)和Visual Studio(用Visual Studio 2013testing)中静态链接OpenCV的C ++项目运行此程序的步骤如下:
#include <opencv2\opencv.hpp> using namespace cv; int main() { Mat3b img = imread("path_to_image"); imshow("img", img); waitKey(); return 0; }
- 从http://opencv.org/downloads.html下载;
- 提取
- 让我们调用OPENCV_DIR,其中包含:
- build立
- 资源
- 创build一个空的项目:
- 新build项目 – > Visual C ++ – >空项目
- 添加一个包含主函数的cpp文件(比如说Start.cpp)(例如上面的代码片段)
- configurationDEBUG
- 添加include和lib目录:
- configuration属性 – > VC ++目录
- 包括目录:添加OPENCV_DIR \ build \ include
- 库目录:添加OPENCV_DIR \ build \ x86 \ vc12 \ staticlib
-
添加所需的库(以下对于这个简单的例子很好,如果你需要其他的function,你应该添加更多的库):
- opencv_core300d.lib
- opencv_highgui300d.lib
- opencv_imgproc300d.lib
- opencv_hal300d.lib
- opencv_imgcodecs300d.lib
- libjpegd.lib;
- libpngd.lib
- libjasperd.lib
- IlmImfd.lib
- libtiffd.lib
- libwebpd.lib
- zlibd.lib
- ippicvmt.lib
- %(AdditionalDependencies)
-
configuration属性 – > C / C ++ – >代码生成 – >运行时库
- 设置为multithreadingdebugging(/ MTd)
-
对于RELEASE构build,您需要在释放模式下执行从6到9的步骤,在步骤8中添加没有尾随“d”的库,并在步骤9中添加multithreading(/ MT)。
- 请享用!
作为奖励,我还build议为Visual Studio安装Image Watch扩展。 非常非常有用的debugging你的Mat
!
显然你链接不匹配的库。 根据您的设置,可以通过“ Project Properties -> Configuration Manager
”将项目更改为64位,或将您的libpath更改为指向x86库。 (顺便说一句,因为我是一个新用户,我不能发表评论,所以我必须写在这里作为答案)