'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;
}
- 从http://opencv.org/downloads.html
下载
- 摘录
- 让我们调用 OPENCV_DIR 包含以下内容的目录:
- 建造
- 来源
- 创建一个空项目:
- 新建项目 -> Visual C++ -> 空项目
- 添加一个将包含您的主要功能(例如上面的代码片段)的 cpp 文件(比如 Start.cpp)
- 配置调试
- 添加 include 和 lib 目录:
- 配置属性 -> VC++ 目录
- 包含目录:添加 OPENCV_DIR\build\include
- 图书馆目录:添加OPENCV_DIR\build\x86\vc12\staticlib
添加所需的库(以下是这个简单示例的好方法,如果您需要其他功能,您应该添加更多):
- 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
- %(附加依赖项)
配置属性 -> C/C++ -> 代码生成 -> 运行时库
- 设置为多线程调试 (/MTd)
对于 RELEASE 构建,您需要在发布模式下执行步骤 6 到 9,在步骤 8 中添加不带尾随 "d" 的库,并在中添加多线程 (/MT)步骤 9.
- 尽情享受吧!
作为奖励,我还建议为 Visual Studio 安装 Image Watch 扩展。对调试你的 Mat
s 非常有用!
我从源代码构建 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;
}
- 从http://opencv.org/downloads.html 下载
- 摘录
- 让我们调用 OPENCV_DIR 包含以下内容的目录:
- 建造
- 来源
- 创建一个空项目:
- 新建项目 -> Visual C++ -> 空项目
- 添加一个将包含您的主要功能(例如上面的代码片段)的 cpp 文件(比如 Start.cpp)
- 配置调试
- 添加 include 和 lib 目录:
- 配置属性 -> VC++ 目录
- 包含目录:添加 OPENCV_DIR\build\include
- 图书馆目录:添加OPENCV_DIR\build\x86\vc12\staticlib
添加所需的库(以下是这个简单示例的好方法,如果您需要其他功能,您应该添加更多):
- 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
- %(附加依赖项)
配置属性 -> C/C++ -> 代码生成 -> 运行时库
- 设置为多线程调试 (/MTd)
对于 RELEASE 构建,您需要在发布模式下执行步骤 6 到 9,在步骤 8 中添加不带尾随 "d" 的库,并在中添加多线程 (/MT)步骤 9.
- 尽情享受吧!
作为奖励,我还建议为 Visual Studio 安装 Image Watch 扩展。对调试你的 Mat
s 非常有用!