静态库是在编译时,将库编译成可执行程序,运行时不需要外部函数库。没有依赖性。
动态库是在运行时,将库加载到程序中,运行时需要外部函数库。有依赖性。
Window下的静态库和动态库是.lib和.dll文件
Linux下的静态库和动态库是libxxx.a和libxxx.so文件
Window下vs静态库和动态库的配置过程:
当需要使用别人的库时,需添加.h,.lib,.dll文件到工程中。
- 建立include文件夹,里面存放.h文件,然后右击工程项目,“属性”->”C/C++”->“常规”->”附加库目录”,然后添加.h的路径,一般是”……/include”。
- 建立lib文件夹,里面存放.lib文件,然后右击工程项目,“属性”->“链接器”->”输入”->”附加依赖项”,添加对应的.lib文件名称,一般是”…./xxx.lib”。
- 建立bin文件夹,里面存放.dll文件,然后右击工程项目,“属性”->“配置属性”->”调试”->”环境”,添加path=“…/bin”
选择生成.lib文件会生成一个.lib文件夹,里边包含.obj,.lib等文件,这样生成的比较多。但是用的时候只给出lib路径就ok了。
选择生成.dll文件会生成一个.lib文件夹,里边包含.obj,.lib,.dll等文件,这样生成的比较少,但是用的时候要给出.dll文件。
常见问题总结:
1.外部函数引用时,编译时报错Cannot open include file: ‘xxx.h’: No such file or directory
程序里引用的#include”XXX.h”是相对路径。要么把这里的路径写完整的路径,要么就在右击properties里的C/C++的general的additional include directories添加上这个.h文件的路径才能在程序里应用相对路径。
2.外部函数引用时,编译时报错“4 unresolved externals”,因为运行程序需要的lib文件没有添加,需要在右击properties里的linker的input里additonal dependencies的添加需要的lib文件。这里需要些完整路径。(如果在general里有路径,这里可以填写那个里边的相对路径)
3.编译时报错,提示cannot open file ‘xxx.lib’
因为程序运行时找不到该静态库,要在右击properties里的linker的general里additonal library directories的找到这个lib所在的路径添加上。
4.编译成功,运行时报错“由于找不到opencv_world310d.dll,无法继续执行代码。重新安装程序可能会解决此问题”。是因为动态运行时找不到这个dll文件。两种解决方法:找到这个dll文件复制到运行程序的.exe同一路径下的位置。或者在properties里的configuration properties的debugging的environment中添加:
path=E:\dianti\KCM_Demo(2)\OpenCV\opencv-2.4.9\build\x64\vc14\bin
5.用openCV\opencv3.1.0\build\x64\vc14\lib\opencv_world310d.lib读取视频之后是空的
if (frame.empty())
break;
改成openCV\opencv-2.4.9\build\x64\vc14\lib读取就没有问题。
换的具体步骤:1.linker中的input改成:E:…\OpenCV\opencv-2.4.9\build\x64\vc14\lib*.lib。2.C/C++中的general的additional include directories中添加E:…\OpenCV\opencv-2.4.9\build\include。3.把configuration properties中debugging中的environment中添加:path=E:…\OpenCV\opencv-2.4.9\build\x64\vc14\bin