IDE编程环境配置
LIB,DLL区别
我们在写项目时会链接(调用)第3方库,或者比如在vs的解决方案solution创建项目project时,不仅可以开发可执行程序exe(可单独运行)(windows/控制台 应用程序),也可以开发自定义库(不可单独运行,只能在应用程序被调用)(DLL动态库,LIB静态库)
库是一个二进制文件,包含了源文件中(.cpp
或 .c)
,头文件相反,头文件仅包含声明信息
静态库(.lib静态库文件)
静态库存储了实际的数据和函数
当编译器链接库时,会从库中复制这些函数,并和我们的应用程序一起组合为exe可执行文件,最终的可执行文件exe会比较大
发布时仅发布这个可执行文件就行
静态链接库中不能再包含其他的动态链接库或者静态库
动态库(.dll动态库文件)辅助文件:(lib引入库/导入库文件)
引入库文件(.LIB)包含DLL导出的函数和变量的符号名,而.DLL文件包含该DLL实际的函数和数据
编译时仅需要链接LIB引入库文件,DLL中的函数代码和数据并不可复制到可执行文件
运行时,会根据LIB的地址符号表,从DLL库查找导出的函数
发布时不仅要发布这个可执行文件,也要发布DLL动态库文件
动态链接库中还可以再包含其他的动态或静态链接 库
优点:
内存优化:只有exe调用了函数时,才会被加载到内存中,从而可以减少exe文件的大小
代码共享/模块化/跨平台兼容性/插件支持:因为并非像静态库一样被复制到exe中,而是调用了什么什么就被加载,因此有较高的灵活性
LIB,DLL库配置
DLL
使用时只能使用dll中导出的函数,未导出的函数只能在dll内部使用
隐式连接
需要三个文件
*.h头文件
需要include 包含导出函数的头文件
- 可以直接写绝对路径
- 可以拷贝到src源码目录下
- 也可以配置项目属性,VC++目录->包含目录,或者,C/C++->常规->附加包含目录
lib引入库
- 可以添加到项目project中,确保选中目标项目,选中要添加的库:"添加"-->"现有项"-->选择lib文件
- 可以配置项目属性,链接器->常规->附加库目录,然后,链接器->输入->附加依赖项(库名)
DLL库
- 直接拷贝,将dll拷贝到运行时目录,与调用者exe文件在同一目录
- 可以配置项目属性,VC++目录->可执行目录,并且,调试 ->工作目录
LIB
*.h头文件
.lib静态库
......和上述一样
DLL库使用
我们要手动控制dll中函数哪些被导出,哪些仅在内部使用,
并且是被导出还是导入,在生成dll的时候我们希望导出,在使用dll时则时希望导入符号
__declspec关键字可以作用于,类,函数,变量
_declspec(dllimport) 导入
__declspec(dllexport)导出
使用时通常通过宏,如果项目定义了DLLEXPORT导出宏,那么宏_DLL_DECLARE_ 即为导出
否则_DLL_DECLARE_为导入
cpp
#ifdef DLLEXPORT
#define _DLL_DECLARE_ declspec(dllexport)
#else
#define _DLL_DECLARE_ declspec(dllimport)
名词
编译器:可以完成从预编译编译,汇编,链接整个过程,将高级编程语言(如C、C++、Java等)编写的源代码转换为机器语言,使得高级语言编写的文件能够被计算机执行
-
编译器执行过程:
-
预编译(Preprocessing)
-
使用g++的
-E
选项将hello.cpp
和包含的头文件预编译为hello.i
-
编译(Compilation)
-
使用
g++
的-S
选项将hello.i
编译为汇编代码文件hello.s
-
汇编(Assembly)
-
使用
g++
的-c
选项将hello.s
汇编为目标文件hello.o(
翻译为机器指令) -
链接(Linking)
-
使用
g++
将hello.o
链接为可执行文件hello.exe
g++ main.cpp -o main
IDE(Integrated Development Environment)集成开发环境:它集成了代码编辑器、编译器、调试器、图形用户界面工具等多种功能,使得开发者可以在一个统一的界面中完成代码编写、编译**(例如vs中的build构建)**、调试、运行等所有开发任务。
GNU:操作系统,包含GCC(编译器),Linux内核,和其他的GNU工具集(Emacs编辑器,GDB调试器等)
GCC(GNU Compiler Collection,GNU编译器集合)编译器:支持多种编程语言(如C、C++、Objective-C、Fortran等)和多种计算机体系结构(如x86、ARM等)GCC/G++编译器:GCC专门编译C语言,G++专门编译C++语言
MSVC(Microsoft Visual C++)编译器:微软公司开发专有的C++编译器,提供了丰富的库和工具来支持Windows平台的应用程序开发,被Visual Studio IDE所集成
MinGW(Minimalist GNU for Windows)编译器:包括GCC编译器和适用于Windows的头文件和库,开源,跨平台性
运行时库:支持程序运行的基本函数的集合,一般是静态库lib或动态库dll。
SDK:软件开发工具包
构建工具:
对于大型项目,手动列出所有源文件编译,可能会变得繁琐且容易出错,为了防止每次编译都要执行大量的命令,我们使用构建工具,
负责整个项目的构建过程,包括调用编译器、链接器、测试框架等,它们通常会读取项目配置文件(如Makefile、CMakeLists.txt、Premake脚本等),这些文件定义了项目的结构、依赖关系、构建步骤等,然后调用系统编译器进行项目构建
这样只用使用make等命令,就可以编译链接项目配置文件里配置的文件了
make构建工具:适合简单的、不需要跨平台的项目构建,
Cmake构建工具:跨平台,自定义语言,适合需要跨平台支持的大型项目,提供了丰富的功能和更好的可维护性。
Premake构建工具,跨平台,lua语言,提供了高度的灵活性和可扩展性,适用于各种规模和复杂度的项目。
在Window通过命令行使用MSVC编译C++项目
编译:
在window系统中,包含MinGW和MSVC编译器,如果想要使用MSVC,首先应下载(Visual Studio Installer,再选择单个组件(MSVC和SDK)安装)
然后配置Path环境变量,这样我们就可以使用MSVC编译器了
这时使用cl main.cpp(文件名),命令,就可以编译为exe文件了
运行:
通过执行main.exe就可以运行了