'unresolved external symbol' 与 OpenCV 3.0 链接时出错

'unresolved external symbol' error when linking with OpenCV 3.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 社区版本中它给了我这些错误:

我看到了similar thread,他们说是x86/x64问题引起的。但是我的项目已经是x86了。我构建的 OpenCV 也针对 x86(见下文)。可能是什么原因?

添加 1

OpenCV 3.0 INSTALL工程生成如下lib目录:

所以它确实是 x86 一个。

我的lib路径配置为上面的路径:

我添加了所有 *d.lib 个文件。

下面是我的 VC 项目的 Configuration Manager

确实也是x86

哪里错了?

添加 2

我手动搜索了fastFree()函数。它在 opencv_core300d.lib 文件中定义。我使用 dumpbin /symbols 命令来检查符号。我发现它的名字完全被破坏了 fastFree@cv@@YAXPAX@Z。那为什么找不到呢?

这里是将 OpenCV 3.0.0 与预编译库一起使用的步骤,对于静态链接 OpenCV 的 C++ 项目,在 Windows(使用 Windows 8.1 测试)和 Visual Studio(使用 Visual Studio 2013) 测试到 运行 这个程序:

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    Mat3b img = imread("path_to_image");
    imshow("img", img);
    waitKey();
    return 0;
}
  1. http://opencv.org/downloads.html
  2. 下载
  3. 摘录
  4. 让我们调用 OPENCV_DIR 包含以下内容的目录:
    • 建造
    • 来源
  5. 创建一个空项目:
    • 新建项目 -> Visual C++ -> 空项目
  6. 添加一个将包含您的主要功能(例如上面的代码片段)的 cpp 文件(比如 Start.cpp)
  7. 配置调试
  8. 添加 include 和 lib 目录:
    • 配置属性 -> VC++ 目录
    • 包含目录:添加 OPENCV_DIR\build\include
    • 图书馆目录:添加OPENCV_DIR\build\x86\vc12\staticlib
  9. 添加所需的库(以下是这个简单示例的好方法,如果您需要其他功能,您应该添加更多):

    • 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
    • %(附加依赖项)
  10. 配置属性 -> C/C++ -> 代码生成 -> 运行时库

    • 设置为多线程调试 (/MTd)
  11. 对于 RELEASE 构建,您需要在发布模式下执行步骤 6 到 9,在步骤 8 中添加不带尾随 "d" 的库,并在中添加多线程 (/MT)步骤 9.

  12. 尽情享受吧!

作为奖励,我还建议为 Visual Studio 安装 Image Watch 扩展。对调试你的 Mats 非常有用!