VC中引入lib库:
链接库分为静态链接库和动态链接库,静态链接库只有一个.lib文件,而动态链接库则有一个.lib文件和.dll文件;静态链接库的.lib文件里面有函数真正实现的机器码,而动态链接库的.lib只有函数的符号名,真正的函数的实现在dll文件中。
当你使用静态库或者使用隐式的方式加载动态连接库的话,都需要将.lib文件加到vc工程里面去,他们的区别就在于,使用动态库的话,在运行程序时,需要额外将函数真正实现的dll文件放到程序的运行目录下或者程序默认的搜索路径下,而静态库则只要引入.lib文件后,就可以调用库中的函数。
在vc环境下将lib库引入工程,有下面3种方法:
第一种方法,lib文件直接加入到工程文件列表中。
在VC中打开“File View”一页,选中工程名,单击鼠标右键,然后在弹出的快捷菜单中选择【Add Files to Project】命令,在弹出的文件对话框中选中要加入dll的lib文件即可。
第二种方法,设置工程的【Project】菜单【Settings】来加载dll的lib文件
打开工程的【Project】菜单的【Settings】,选中【Link】,然后在“Object/library modules”下的文本框中输入dll的lib文件。
第三种方法,预编译指令导入
加入预编译指令#pragma comment(lib,”*.lib”),这种方法优点是可以利用条件预编译指令链接不同版本的lib文件。因为,在Debug方式下,产生的lib文件是Debug版本,如Regd.lib;在Release方式下,产生的lib文件时Release版本,如Regr.lib。
当然,在引入.lib文件后,工作并没有完成,为了解决编译问题,我们还需要将连接库中函数的对应的头文件(*.h)包含到其中,在这个头文件中给出了链接库中定义的函数原型。在编译完成后,连接器会去.lib文件中去查找函数的符号表,找到后,编译和连接工作就完成了;在运行的时候,再去dll文件中去找函数的真正实现(如果是静态库则直接在.lib文件中寻找函数的真正实现。)
转自:http://www.cnblogs.com/RascallySnake/archive/2012/10/17/2728557.html
解决VC6.0中的连接错误:
在涉及到进程信息获取部分中,需要使用Psapi.lib和psapi.h,在VC6.0中并不包含该类库,需要额外下载,将Psapi.lib放入VC安装目录下的LIB,将psapi.h放入INCLUDE,Psapi.dll一般系统自带,位于System32目录下。
在这里实现的是将dll注入到一个进程的地址空间,在VC6.0中需要自己设置一些选项,添加lib等链接库,程序才能正常编译生成。
添加链接库利用上述提到的方法即可,在连接中还是产生了如下错误:
unresolved external symbol "__declspec(dllimport) const DllClass::`vftable'" (__imp_??_7DllClass@@6B@)
这里的解决方法是没有将头文件中的预处理定义加入设置,
在VC工程的工程->设置->C/C++->预处理程序定义中添加BUILDING_DLL即可。
参考:http://blog.chinaunix.net/uid-25958655-id-4194184.html