上回讲述了CMake使用动态库与使用静态库之间并没有太大的区别,并讲述了学习期间碰到的问题:无法正确生成动态库DLL,导致使用动态库的test测试项目无法正确编译;
【 学习时遇到的疑问 】
既然已经include_directories指定头文件的搜索路径,头文件已经声明,使用动态库为毛还要lib中的声明?
声明在头文件是没错的,所以需要include_directories来指定头文件的搜索路径;但是lib也并不包含函数的声明,只是dll中的函数的列表而已,这一点我理解错了!
在此将动态库与静态库之间的区别做一个对比,分析错误的原因:
部分资料来自:http://www.cppfans.org/1394.html
动态库与静态库的对比
静态库lib
编译静态库:生成的是一个lib文件(static lib);
对于静态库lib的调用者:
编译时:链接使用lib文件(这个过程可以理解为:链接并把函数的实现一起打包进执行文件中)。
运行时:则不需要则不需要lib文件;注:静态库的lib:里面其实就是源文件函数的实现;
动态库dll
动态库编译之后有3个文件:.dll,.lib(dynamic lib