SDK(Software Development Kit)----软件开发工具包
一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
软件开发工具包括广义上指辅助开发某一类软件的相关文档、范例和工具的集合。
Windows SDK包含了开发该windows版本所需的windows函数和常数定义、API函数说明文档、相关工具和示例。
DLL即 Dynamic Link Library(动态链接库)。可以看做是API函数的集合体,我们经常会看到一些 .dll 格式的文件,这些文件就是动态链接库文件,跟 .exe 文件不同的是,.dll 文件不能直接执行,他们通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。其实 Windows 的三大模块就是以 DLL 的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API 函数的执行代码。为了使用 DLL 中的 API 函数,我们必须要有 API 函数的声明(.H)和其导入库(.LIB)。导入库可以理解为是为了在 DLL 中找到 API 的入口点而使用的。
.lib是一种文件名后缀,代表的是静态数据连接库,在windows操作系统中起到链接程序(也可以说是声明)和函数(或子过程)的作用
数据库有静态数据库(.lib文件)和动态数据库(.dll文件)
静态编译将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序
动态编译的LIB文件相当于一个C语言中的h文件,是函数导出部分的声明,而不将实现过程嵌入到程序本身中,编译后只是将函数地址存在宿主程序中,运行到调用函数是调用DLL并载入函数来实现函数的具体操作。
LIB文件是库文件(与DLL文件相类似),供其它程序调用的,直接打不开。
(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中 (它包含了函数所在的DLL文件和文件中函数位置的信息(入口))。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。
两种文件的区别
使用lib需注意两个文件:
•.h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。
•.LIB文件。
使用dll需注意三个文件:
•.h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
•.LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误(如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载)。
单词:Compile 编译
集成开发环境(IDE,Integrated
Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。
Makefile 一般windows的IDE都帮我们实现了这个工作
它关系到整个工程的编译规则,一个工程的源文件不计其数,并且按类型放在不同的目录中,makefile定义了规则来指定哪些需要先编译,后编译或者重新编译,它就像一个shell脚本一般----也就是它描述了整个工程的编译,连接等规则
它最大的好处就是----自动化编译,就是只需要一个make指令,整个工程就可以完全自动编译
Make是一个工具,解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令(因为IDE集成了编写,编译,运行),不同平台有不同的make编译工具,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。它们规定的makefile文件格式都不相同,可见,makefile都成为了一种在工程方面的编译方法。
可以把makefile,make看成是编译的过程
不同Make工具,如GNU Make、QT的qmake、微软的MS nmake、BSD Make(pmake)等,遵循着不同的规范和标准,所执行的Makefile格式也不同。如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用Make工具,必须为不同的Make工具编写不同的Makefile。
CMake是一个比Make工具更高级的编译配置工具,是一个跨平台的、开源的构建系统(BuildSystem)。CMake允许开发者编写一种平台无关的CMakeList.txt文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化Makefile和工程文件,如:为Unix平台生成Makefile文件(使用GCC编译),为Windows MSVC生成projects/workspaces(使用VS IDE编译)或Makefile文件(使用nmake编译)。使用CMake作为项目架构系统的知名开源项目有VTK、ITK、KDE、OpenCV、OSG等。
在Linux平台下使用CMake生成Makefile并编译的流程如下:
A、编写CMake配置文件CMakeLists.txt
B、执行命令cmake PATH生成Makefile,PATH是CMakeLists.txt所在的目录。
C、使用make命令进行编译。
GNU编译器套件(GNU
Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。
如:为Unix平台生成Makefile文件(使用GCC编译),为Windows MSVC生成projects/workspaces(使用VS IDE编译)或Makefile文件(使用nmake编译)。
GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac
OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。
GCC功能与作用:
1、预处理
命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。
2、编译
用GCC编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。
3、连接
当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。
4、汇编
汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编,经过预编译和汇编之后都生成以.o为后缀的目标文件。
gcc所遵循的部分约定规则:
1、.c为后缀的文件,C语言源代码文件。
2、.a为后缀的文件,是由目标文件构成的档案库文件。
3、.h为后缀的文件,是程序所包含的头文件。
4、.i 为后缀的文件,是C源代码文件且不应该对其执行预处理。
5、.m为后缀的文件,是Objective-C源代码文件。
6、.o为后缀的文件,是编译后的目标文件。
7、.s为后缀的文件,是汇编语言源代码文件。
以gcc为例:
1,build static library:
#gcc -c *.c
-E Preprocess only; do not compile, assemble or
link
-S Compile only; do not assemble or link
-c Compile and assemble, but do not link
IDE与编译器
IDE是集成开发环境,当然会包含编译器
0.有些IDE是支持多种编译器和多种硬件架构的
1, IDE本身跟硬件没有关系, 是自带的编译器跟平台有关(具体可以说是汇编)
2, 编译器与你是什么架构的CPU是有关的,不同架构的CPU,其机器指令不一样,所以需要不同的编译器
1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。
2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。
3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大
4.所以出现了make工具
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。
5.makefile是什么?简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。
6.makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。
7.makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。—(也就是不同平台的makefile格式不同)
8.这时候就出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。
11.当然如果你用IDE,类似VS这些一般它都能帮你弄好了
**
**
apt-get安装的是由源码包编译过的二进制包,供应商在编译过程中已经解决掉包之间的依赖关系的,因此直接安装即可
而使用源码包要make&&make install手动编译,自己解决依赖
源码包和apt-get安装的服务本质上没有区别的,
但是使用源码包可以自定义安装的位置,使用apt-get会把服务安装在系统默认位置
另外使用源码包安装的服务效率高一点
Windows常用的IDE是vs系列,它用于进行开发,以及windows环境下的编译工作,因为是集成开发环境,以下的操作它都会自动帮你实现
而类unix环境下,一般需要用到编译工具
Gcc编译器—可以编译各种语言写的程序,因为它包含了它们的库—但是这个仅适用于编译单个或很少的文件
Make,makefile是用来进行批量编译的,makefile是乐谱,make是演奏家,根据乐谱来进行编译—但是不同的平台makefile格式不同-----其中makefile就会使用到gcc编译器
所以使用cmake来进行编译,它是一个跨平台的编译工具,能生成普适的makefile文件,并且相同的make工具
编译器是和CPU的架构相关的,因为不同的CPU的机器指令集不相同,所以需要不同的编译器