zoukankan      html  css  js  c++  java
  • 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文件中寻找函数的真正实现。)

     

    ps:补充一句,关于加载动态链接库的两种方式隐式加载和显示加载,隐式加载就如上面所介绍的引入.lib文件,包含链接库的头文件,拷贝dll文件到运行目录下后就实现了隐式加载;而显示加载则是使用LoadLibrary和FreeLibrary来加载和卸载动态链接库,使用GetProcAddress函数来获取函数指针,然后通过函数指针来调用链接库中的函数。

  • 相关阅读:
    Java如何滚动几个小时和几个月?
    同步一个 fork
    Push failed: Failed with error: fatal: Could not read from remote repository
    Java NIO AsynchronousFileChannel
    Java NIO Files
    Java NIO Path
    Java NIO vs. IO
    Java NIO Pipe
    Java NIO DatagramChannel
    Java NIO: Non-blocking Server
  • 原文地址:https://www.cnblogs.com/RascallySnake/p/2728557.html
Copyright © 2011-2022 走看看