【发布时间】:2015-12-03 19:47:48
【问题描述】:
我正在尝试使用 OpenCV 3.0.0 设置 VS2015 解决方案,并且我正在尝试仅使用静态库。
头文件:正确包含 OpenCV 头文件,我可以毫无问题地在源文件中引用它们。
库:当我使用 CMake 构建 OpenCV 时为我创建的静态库文件(称为“ippicvmt.lib”)被正确包含,并且加载没有问题。
在代码中使用 OpenCV:当我尝试在我的解决方案中使用 OpenCV 类/函数时,在构建类似于
时出现链接器错误LNK2001: unresolved external symbol "public: virtual double __thiscall cv::VideoCapture::get(int)const
我可以在使用这个函数时右键单击并选择“转到定义”,它会打开 videoio.hpp 并显示虚拟方法的声明。我看到的链接器错误可能是由于 Visual Studio 无法在我的解决方案中包含的静态库中找到该方法的实际实现。
据我了解,我需要包含的唯一 .lib 文件是一个静态库文件。这就是我现在所包含的所有内容。
有人知道为什么VS在OpenCV静态库中找不到这段代码的实现吗?
【问题讨论】:
-
您在使用 CMake 时是否指定了是否要构建共享库?它应该生成比 ippicvmt 更多的库。另外,您是在构建调试版本还是发布版本?
-
我目前正在尝试构建发布,项目设置都是发布构建。我没有触摸 CMake 设置,所以我不确定。我应该让它构建共享库吗?
-
重新制作 openCV 解决方案并取消选中构建共享库。这将告诉 openCV 编译静态库而不是 DLL
-
我看到它在 .../opencv/.../lib 中生成的其他库,我的理解是这些只有在我要使用 .dll 时才有用
-
这是不正确的。使用静态库构建程序时,需要链接更多库。您可以查看这篇文章以获取更多信息:stackoverflow.com/questions/16830842/… 一个简单的解决方法是包含所有非调试库(不以 d 结尾的库)。你也可以只包括你需要的,我相信这将是 core300 和 video300。使用静态库构建程序是一件痛苦的事情,但是一旦你获得了所有需要链接的库,那就不算太糟糕了。
标签: c++ opencv visual-studio-2015 static-libraries .lib