写在前面
本文将针对QT添加第三方库的过程和原理做一个知识的补充,包括静态库和动态库、MinGW和MSVC、make和makeinstall、debug和release、环境变量等。(C++中同理)
1、库
1.1、静态库
Windows :.lib
Linux\Mac:.a
静态库在编译的时候会被直接拷贝到目标程序里。
(程序打包后,放到没有环境的电脑中,也可以正常运行)
2.2、动态库
Windows :.dll
Linux:.so
Mac: dylib
动态库在编译时并不会被拷贝到目标程序中,只会在运行的时候调用。
(程序打包后,放到没有环境的电脑中,可能无法正常运行;需要把相应的dll
动态库一起打包才能正常运行)
2、编译器
2.1、MSVC
MSVC是指微软的VC编译器,主要用于windows下开发。
(使用msvc导入第三方库的时候,库文件一般是.lib
)
2.2 MinGW
MinGW是指是Minimalist GNU on Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你 在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方运行时库。
(使用mingw导入第三方库的时候,库文件一般是.a
)
3、make和make install
3.1、make
make是用来编译的,它从Makefile中读取指令,然后编译。
如果你使用静态库,只需要make即可,生成.lib
或者.a
。
3.2、make insatll
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
如果你使用动态库,需要make insatll
,生成.dll
或者.so
。一般使用动态库在导入库之前需要配置环境变量。
4、配置环境变量
配置环境变量一般是可执行文件.exe
的目录。
我们在程序中调用动态库的话,一般是要头文件
、lib
还有dll
。但是我们在程序中一般只引入头文件
和lib
,那么dll
呢?这是时候我们就需要配置环境变量,使得系统自动找到dll
。
如果配置第三方库、则是配置动态库的目录,一般在make insatll
之后生成的bin
目录中,里面包含dll
文件。
如果不配置环境变量的话,则需要把lib
和dll
放在同一个文件夹中,在程序中引入。
5、在windows调用静态库
(静态库只需编译,不用make insatll
)
一般先用cmake生成makefile,或者sln
5.1 MingGw
用mingw32-make
编译
获取编译好的.a
文件
在代码中配置.a
文件和头文件(include)
5.2 MSVC
打开camke生成的sln(用vs2019)
选择Debug或者Release,x86\x64
选择ALL_BUILD, 右击, 重新生成
获取输出的.lib
文件,区分debug和release
在代码中配置.lib
文件和头文件(include)
6、在windows调用动态库
(动态库需要make insatll
)
调用动态库也离不开
lib
文件
程序运行的入口在exe里面,当执行exe到动态库内容时,需要跳到内存里的动态库区域,然后执行相关内容;这个动作就需要exe里面存在一个引路人,来告诉exe,这个函数是动态库的函数,需要跳到其他内存区域执行,而这个存在于exe的引路人就是动态库的.lib文件,因为.lib文件会编译进exe文件里,.dll文件不会被编译进exe里面;动态库的.lib文件只提供链接到动态库的功能,它本身不包含库的代码内容。
原文链接:https://blog.csdn.net/qq_40541268/article/details/125154750
一般先用cmake生成makefile,或者sln
5.1 MingGw
用mingw32-make
编译
然后再mingw32-make install
在输出的目录中一般有一个bin
目录,里面有dll
将这个bin
目录的路径添加到环境变量
获取编译好的.a
文件(一般在lib
目录下)
在代码中配置.a
文件和头文件(include)
5.2 MSVC
使用camke和visual studio编译并生成动态库
获取dll
和lib
配置dll
目录的环境变量(如果不配置,则把dll
和lib
放在一起)
在代码中配置.lib
文件和头文件(include)
7、在VS2019中添加第三方库
一般动态库这样配置
静态库这样配置