';未解析的外部符号';使用OpenCV 3.0链接时出错
我从源代码构建OpenCV 3.0。还有一些额外模块的contrib repo。我手动设置VS2013项目以使用生成的lib文件 我的代码现在很简单:';未解析的外部符号';使用OpenCV 3.0链接时出错,opencv,visual-c++,opencv3.0,Opencv,Visual C++,Opencv3.0,我从源代码构建OpenCV 3.0。还有一些额外模块的contrib repo。我手动设置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; }
#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了。我构建的OpenCV也针对x86(见下文)。这是什么原因
加1
OpenCV 3.0安装项目生成以下库目录:
因此,它确实是一个x86
版本
我的库路径配置为上述路径:
我添加了所有的*d.lib
文件
下面是我的VC项目的配置管理器
所以它确实也是x86
哪里会出错?
加2
我手动搜索了fastFree()
函数。它在opencv_core300d.lib
文件中定义。我使用dumpbin/symbols
命令检查符号。我发现它的名字被弄乱了,就像fastFree@cv@@YAXPAX@Z
。那么为什么不能找到它?< /p> < p>这里,使用OpenCV3.0.0预编译的LIBS,用于在Windows中(Windows 8.1测试)和VisualStudio(VisualStudio 2013测试)静态运行OpenCV的C++项目来运行这个程序:
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
Mat3b img = imread("path_to_image");
imshow("img", img);
waitKey();
return 0;
}
#包括
使用名称空间cv;
int main()
{
Mat3b img=imread(“路径到图像”);
imshow(“img”,img);
waitKey();
返回0;
}
下载自
提取
我们将OPENCV_DIR称为包含以下内容的DIR:
- 建造
- 来源
创建一个空项目:
新项目-> VisualC++ >空项目
添加一个包含主函数的cpp文件(比如Start.cpp)(例如上面的代码段)
配置调试
添加include和lib目录:
- 配置属性->VC++目录
- 包含目录:添加OPENCV\u DIR\build\Include
- 库目录:添加OPENCV\u DIR\build\x86\vc12\staticlib
添加所需的LIB(以下内容适用于此简单示例,如果需要其他功能,您应该添加更多):
- opencv_core300d.lib
- opencv_highgui300d.lib
- opencv_imgproc300d.lib
- opencv_hal300d.lib
- opencv_imgcodecs300d.lib
- libjpeg.lib李>
- libpngd.lib
- libjasperd.lib
- IlmImfd.lib
- libtiffd.lib
- libwebpd.lib
- zlibd.lib
- ippicvmt.lib
- %(附加依赖项)
配置属性->C/C++->代码生成->运行库
- 设置为多线程调试(/MTd)
对于发布版本,您需要在发布模式下执行从6到9的步骤,在步骤8中添加不带尾随“d”的lib,在步骤9中添加多线程(/MT)
享受吧李>
作为奖励,我还建议安装VisualStudio扩展。对于调试Mat
s非常有用 似乎您是从源代码处编译OpenCV。如果是这样,您是否还构建并安装了将LIB放置在正确位置的项目?或者,您可以只下载预编译的libs@Miki是的,我是从源代码处编译的,因为我需要使用一些官方版本中未包含的额外模块。是的,我构建了INSTALL
项目。该项目将libs放在如下位置:。\install\x86\vc12\staticlib
,我将其作为附加lib路径添加到我的VC项目中。我在问题中添加了截图。我想您也添加了opencv_coreXXX等。。在Linker->Input->其他依赖项中,对吗?@Miki是的,我将它们添加为*d.lib
。请查看我新添加的屏幕截图。@Miki我改为使用OpenCV 3.0.0的官方版本。出现了完全相同的错误。我将您的设置与我的设置进行了比较。似乎我不能用*d.lib
作为所有lib文件的缩写。我改为分别列出lib文件,现在编译得很好。我正在使用VS2013社区
version。谢谢。另外,我发现我的构建中缺少IlmImfd.lib
。在官方建筑中,它是一个相当大的图书馆(将近2800万)。但它仍然可以在没有它的情况下编译。不确定它的用途。不适用于3.3.1:致命错误LNK1104:无法打开文件“opencv\u world311d.lib”