我理解静态链接和动态链接的概念。在Windows平台上,.dll
是动态库,而.lib
是静态库。
我的困惑:我做了一个项目,需要使用OpenCV库。基本上,我需要使用以下5个OpenCV库:
-lopencv_core
-lopencv_highgui
-lopencv_imgcodecs
-lopencv_imgproc
-lopencv_videoio
为此,在项目属性中,我需要告诉VS2012的编译器要在
Additional Library Directory
中设置库的路径,并且还要告诉链接器我想在项目中使用哪些.lib
库。项目顺利编译通过。但是当我尝试运行这个项目时,它提示说videoio.dll
缺失(其他库也有同样的错误)。只要将.dll
文件复制到.exe
所在的文件夹中,项目就能正常运行。
问题:既然已经链接了静态库(.lib
),为什么我还要复制.dll
文件呢?
更进一步的问题:当我在Mac OS或Linux上使用Eclipse时,我只需告诉编译器OpenCV库的位置以及要使用哪些其他OpenCV库,我从未需要将动态库放在.exe
文件夹中。