入门知识之——VC++ 静态链接库和动态链接库的配置 (lib、dll)

来源:互联网 发布:杭州淘宝tnt摄影基地 编辑:程序博客网 时间:2024/06/09 17:58

 

 

开发的时候,经常会遇到要加载开源库或者其他人写的静态链接库,动态链接库。很多新手对于在vc++(2003以上版本,本人不熟悉6.0,所以本篇讲的都是在2003以上版本中的配置方法)怎样配置库文件不太清楚,其实这件事很简单,只是在网上似乎搜索不到更贴切的答案,这篇文章给大家做个入门介绍。

在C++里面,如果我们对于一个功能模块,进行包装,有两种最常见的方式,一种是静态链接库,一种是动态链接库。在vc平台下,静态链接库使用的是lib文件。动态链接库使用的是dll文件,动态链接当然也可包括lib文件。具体动态链接库和静态链接库的知识很多老师如孙鑫讲的都很明白,这里不再赘述。本篇只讲,如果拿到了别人的静态链接库或者动态链接库,怎样去配置开发环境。

1 头文件

开发环境的配置主要是告诉编译器去哪里找头文件、lib文件和dll文件。一个通常的做法是将头文件放在名称为“include”文件夹内,lib文件放在“lib”文件夹内,dll放在”bin”或者与exe同一目录。这样配置不是强制要求,只是一种推荐的做法,原因是大多数的开源软件或者商业类库都是这样结构。先看vc++(2003以上版本)中涉及到配置地方。打开工程,在解决方案中,右键单击项目工程->属性,打开项目属性页如图所示。

在项目属性页中,左侧树状菜单选择配置属性 ->C/C++ ->常规如图所示

在右侧详细信息中,出现“附加包含目录”“解析#using引用”等项,其中” 附加包含目录” 既是vc++搜索附加头文件的位置,在此处添加头文件的路径,不同的路径用“;”隔开。这里说明,vc++会在此处和属性页左侧树状菜单的“VC++目录”中搜索头文件。但鉴于VC++目录通常是配置VC++内部环境的头文件目录,所以不建议改动。作为项目附加的头文件,最好放在此处。关于文件的路径,读者可以直接配置文件的绝对路径或者相对路径。笔者比较喜欢相对路径,通常会把添加外部库的头文件一并放在工程目录下,然后通过相对路径来配置头文件(关于绝对路径和相对路径,请读者自己百度之)。这样的一个好处是在做团队开发,比较容易配置统一的开发环境。

2 库文件

无论是动态链接库还是静态链接库,如果让编译器自己去寻找并加载lib库的话,必须配置lib库的位置。同样,在项目属性页,左侧树状菜单中单击“链接器“ ->“常规”,如图所示:

在“附加库目录”中,输入lib库的路径(绝对路径或相对路径)。这时,编译器会把此处的路径添加到vc++搜索的lib目录中。到此,库的配置快结束了。如果读者会用#pragma comment 宏命令来加入lib文件,比如#pragma comment (lib,”XXX.lib”),那么,编译器在编译的时候,自动会在所有此处配置的目录中去寻找XXX.lib文件,并加载。当然,也可以不用#pragma comment宏,解决的方法是在项目属性页的左侧树状菜单中选择 “连接器”下的 “输入”,如图所示

右侧的附加依赖库中,添加需要加载的库的名称,比如XXX.lib,这里配置的名称与用#pragma comment(lib,”XXX.lib”)效果是一样的。若用#pragmacomment(lib,”XXX.lib”)形式,XXX.lib可以使用全路径,比如#pragma comment(lib,”C:\XXX.lib”) 这时,编译器会在指定的路径中加载指定的lib文件。当然,笔者还是倾向于将lib文件目录加入到vc平台的附加库目录中,然后直接使用lib文件名来进行配置,因为如果加入路径的话,可能不方便团队合作开发。

3 dll文件

Dll文件是动态链接库大家都知道,在运行exe文件的时候,它被加载。若是程序自动加载的话,是通过dll对应的lib文件来确定需要加载的dll文件的名字,所以若采用自动加载dll文件,必须提供对应的lib文件,lib文件的配置前文已述。那么dll文件,系统是如何加载的呢?很惭愧,笔者没有做实验,但读者可以百度之。大体上是:exe文件同级目录,system32文件夹,path环境变量指定的文件夹等。一般的做法是放在exe同级目录或者path目录中。放在exe文件同级目录中很容易,直接把copy到debug/release目录下即可(默认是debug或release是exe文件生成目录,具体要看读者项目的配置了)。若是采用path环境变量,则可以把dll放在任意文件夹中,然后将该文件目录放在系统环境变量PATH中。注意,有些系统设置PATH环境变量需要重启机器才能生效。对于vc++来说,在配置路径的时候可以选择系统变量的宏名称,举个例子,在配置lib库目录的时候,点击“附加库目录”来菜单,点击“编辑”,打开“附加依赖项”窗口,右下角有“宏”按钮,单机该按钮,出现宏名称表。这些宏名称有些是系统内置的,我们可以增加自动以的宏命令,只要在环境变量中出现的变量名称,都会出现在宏名称窗口中。所以,我们可以自己建立系统变量或用户变量,然后利用宏名称来添加路径。

 

4 PDB文件

*.PDB文件中存放了调试源码的文件信息,它同dll一样,需要放到exe运行时,系统可搜索的环境中,比如exe同级目录下,或者PATH环境指定的目录中。当调试到某段代码,需要跟踪到源文件时,vc++会根据pdb文件,找到对应的cpp来进行调试。如果是自己编译源码的话,若是动态链接,在debug模式编译过程中,会产生pdb文件,每次编译的pdb只能对应于编译时的dll,因为两次编译dll,对应的pdb会不同。Copy dll文件和pdb文件到具体环境后,就可以跟踪调试源代码了。注意,cpp文件位置不能改变。比如在c:\src下面存放cpp文件,然后进行编译,编译之后,修改src文件夹名称为src1,那么,在调试的时候讲找不到cpp,必须手工指定了。对于静态链接,无需pdb文件,vc会直接定位到源文件位置。

 

原创粉丝点击