【发布时间】:2015-09-14 10:12:13
【问题描述】:
我了解静态和动态链接的概念。众所周知,在Windows平台上,.dll是动态库,.lib是静态库。
我的困惑:我做了一个项目,我必须在其中使用 OpenCV 库。基本上,我不得不使用以下 5 个 OpenCV 库:
-lopencv_core
-lopencv_highgui
-lopencv_imgcodecs
-lopencv_imgproc
-lopencv_videoio
为此,在项目的属性中,我必须告诉 compiler VS 2012 的 Additional Library Directory 中的库路径,我还必须告诉 linker 关于我想用于项目的.lib 库。该项目编译没有任何错误。但是当我尝试运行该项目时,它说缺少videoio.dll(其他库也有同样的错误)。一旦我将.dll 文件复制到存在.exe 的文件夹中,项目就运行良好。
问题:我已经链接了静态库 (.lib),为什么还要复制 .dll 文件?
进一步的问题:当我在 Mac OS 或 Linux 上使用 Eclipse 时,我只需要告诉编译器 OpenCV 库在哪里,并告诉链接器我想使用哪些其他 OpenCV 库。在这种情况下,我不必将动态库放到 .exe 文件夹中。
【问题讨论】:
-
在 VisualStudio 中,每个 .dll 文件通常都有一个 .lib 文件。这些与静态库不同,因为它们被称为导入库。你需要那些链接你的(动态)dll。在 OpenCV 中,静态库位于
staticlib文件夹中,而导入库位于lib文件夹中。动态库 (dll) 可以在bin文件夹中找到。因此,如果您想静态链接,则必须使用staticlib目录中的库。
标签: c++ opencv visual-studio-2012 dll