在撰写正文之前,请允许我发表一点小小的感叹的机会,谢谢!首先我得感谢互联网,因为有你,让我学到了更多;其次,我要感谢广大博主们的无私奉献精神,因为你们精心记录的每一篇日志,帮助了无数个像我一样初涉C++的充满迷茫的IT民工。
经过查阅无数博主们的结晶,加上自己动手实践的结果,今天我也记录下在使用VS2005调用lib的心得体会。因为才疏学浅、文笔欠佳,故文中有不妥之处,还请各位大虾批评指出,助我不断提升自己的能力,我会非常感谢您的!
好了,言归正传。使用lib文件,需要三个步骤:
1.包含必要的头文件。
2.链接相应的库文件。
3.使用库文件
在这里,我主要想和大家分享一下有关lib的设置的前两个步骤,以下是我动手实践的步骤,以便描述需要:
首先,我使用了一个开源的第三方库,gloox,然后在Debug模式下将其编译为lib,生成lib路径:gloox/Debug/gloox.lib。
接着,在与gloox同级目录下建立一个名叫testlib的win32工程,然后新建一个c++文件,取名main.cpp,文件中敲入如下代码:
#include "../gloox/src/client.h"
#pragma comment(lib,"../gloox/Debug/gloox.lib")//链接库文件
using namespace gloox;
int main( int argc, char** argv )
{
JID jid( "test@127.0.0.1/gloox" );
Client* client = new Client( jid, "123456" );
client->connect();
return 0;
}
以上代码的作用是连接xmpp服务器
首先引入头文件,#include "../gloox/src/client.h",这里使用了相对路径,除了这种直接在代码中指定路径的方式外,还可在工程属性中设置,他们之间是等效的。右键点击工程名testlib,选择"属性",弹出工程属性框,然后是"配置属性" - "c/c++" - "常规" - "附加包含目录",该选项就是用于设置lib中需要用到头文件的目录,我添加的目录为:E:/workspace/gloox/src。添加完成之后,然后在程序中就可以修改引入头文件的代码为:#include <client.h>
紧接着是链接库文件,#pragma comment(lib,"../gloox/Debug/gloox.lib"),这里也使用了相对路径,跟上面引用头文件的方式一样,也可在工程属性中直接指定路径。步骤:右键点击工程名testlib,选择"属性",弹出工程属性框,然后是"配置属性" - "链接器" - "常规" - "附加库目录",该选项就是用于设置lib所在目录的,我添加的目录为:E:/workspace/gloox/Debug。添加完成之后,然后在程序中就可以修改链接库文件的代码为:#pragma comment(lib,"gloox.lib"),仅仅需要指定链接库的名字。
其实,通过项目属性,上面的#pragma comment(lib,"gloox.lib")代码都可省去,方法跟上面的差不多。右键点击工程名testlib,选择"属性",弹出工程属性框,然后是"配置属性" - "链接器" - "常规" - "附加依赖项",该选项就是用于指定项目中需要用到的库文件,因为前面已经指定了库文件所在目录,因此,这里我只需要指定库文件的名字即可:gloox.lib。这样,就省去了在文件中添加代码了。不过在文件中添加链接库文件的代码主要是为了方便别人在使用你的代码时候不用再去设置一下工程的属性,在读你的代码时,也很容易就知道你的代码中都用到了哪些库文件。
最后,我总结一下在动手过程中得出的现象,我在项目属性中已经指定了库文件所在目录,以及依赖项,然后还在源文件中显式指定链接库文件的代码,程序也能运行。然后我还测试了另外一种情况,在工程里添加两个源文件,每个源文件中都显式指定链接库文件的代码,然后再运行,ok,在其中任意一个源文件中指定链接库文件的代码,运行也ok。我觉得这个应该涉及到编译器的编译规则的问题吧,期待大虾的指点。不过当多个文件都需要调用lib中的类的话,我觉得通过项目属性来设置链接的lib,应该比在文件中显式调用更容易让人理解吧,纯属个人愚见。
初涉C++,欢迎拍砖……