编译、链接、visual studio 和 cmake 工作

来源:互联网 发布:jsp asp php 编辑:程序博客网 时间:2024/05/22 14:04


编译: 

编译(compilation , compile) 1、利用编译程序从源语言编写的源程序产生目标程序的过程。 2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。

链接:

链接是指在电子计算机程序的各模块之间传递参数和控制命令,并把它们组成一个可执行的整体的过程。链接也称超级链接,是指从一个网页指向一个目标的连接关系,所指向的目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是图片、电子邮件地址、文件、甚至是应用程序。


按照链接路径的不同,网页中超链接一般分为以下3种类型:内部链接,锚点链接和外部链接.

如果按照使用对象的不同,网页中的链接又可以分为:文本超链接,图像超链接,E-mail链接,锚点链接,多媒体文件链接,空链接等.

编译链接区别 


动态链接库:

动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。Windows下动态库为.dll后缀,在linux在为.so后缀。


cmake 作用是进行编译和工程项目的配置,并不进行真正的编译环节。第一次点击config时,配置编译器,选择的vs2013,采用vs2013进行编译。最终生成工程文件,如.sln 文件,所有生成文件在路径build中,如下:



通过vs进行编译,生成文件如下 : 



编译输出:



Lib文件

.lib是一种文件名后缀,该文件为Windows操作系统中的库文件,相当于Linux中的·a或·o、.so文件

lib有静态lib和动态lib之分。

lib文件通过编译才可以使用,编译分静态与动态之分。

静态编译

静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序

折叠动态编译

动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持

详细说明

lib文件是不对外公开的,不能查看一个编译过后的文件

有几个选择:

1。如果你查看有同名的dll文件,可以通过vc自带的depends查看dll接口

2。通过msdn看你使用的该lib包含的函数名,来查找其对应的头文件,头文件里面有整个lib的函数声明(可能不全)

3。查看vc或者其他工具安装目录下的src目录,查看函数的代码

lib文件是二进制文件,所以要查看它的内容,只能反汇编。

用编程语言,打开lib文件的办法有三个:

1、在object/library modules使用全路径名;

2、把*.lib放在VC的Lib目录中

3、修改project setting的Link->Input中的Addtional library path,加入你的目录。

LIB文件是库文件(与DLL文件相类似),供其它程序调用的,直接打不开。

折叠内容

一个lib文件是obj文件的集合。当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件。我们可以通过tlib.exe(在tc2.0下的根目录)来对lib文件进行操作,你可以把自己生成的obj文件通过tlib命令加入到一个lib文件中,也可以把lib文件内的obj文件进行删除操作,还可以把内部的obj文件给提取出来。明白了lib文件的大致结构以及对它的具体操作,在学习C语言的过程中,就会又多了一个切入点对C语言具体实现进行研究。



Obj文件:

程序编译时生成的中间代码文件,目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可行文件了。

程序编译时生成的中间代码文件

目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。

OBJ只给出了程序的相对地址,而可执行文件是绝对地址。

3D中的OBJ文件格式详解

OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的互导,也可以通过Maya读写。比如你在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几乎所有知名的3D软件都支持OBJ文件的读写,不过其中很多需要通过插件才能实现。

OBJ文件是一种文本文件,可以直接用写字板打开进行查看和编辑修改。另外,有一种与此相关二进制文件格式(*.MOD),其作为专利未公开,因此这里不作讨论。













0 0
原创粉丝点击