';未解析的外部符号';使用OpenCV 3.0链接时出错

';未解析的外部符号';使用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; }

我从源代码构建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;
}
但在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”