引言:vs中怎么添加外部头文件?

如过直接在项目头文件处,添加一下,如下图:

否则,依然会报错,如下图:

有两种方法,来解决(你不在vs上的添加它也没事):

(1) 直接把外部头文件复制过来,放在此项目下即与该项目cpp文件同一目录,如下图:

(2)项目右键,属性里的C/C++   - > 常规,附加包含目录里添加头文件的所在目录路径

或者放在,项目右键,属性里的VC++目录 --->包含目录,包含目录里添加头文件的所在目录路径

vs中包含目录、库目录、附加包含目录、附加库目录、附加依赖项如何正确使用?

见如下博客:

https://blog.csdn.net/u012043391/article/details/54972127

编译器在编译过程中查找包含目录(Include文件)的顺序:

The compiler searches for directories in the following order:

  1. Directories containing the source file.
  2. Directories specified with the /I option, in the order that CL encounters them.
  3. Directories specified in the INCLUDE environment variable.

其中step2中的/I是由C/C++ -> General -> Additional Include Directories设置的。

而step3中的INCLUDE是由VC++ Directories -> Include Directories设置的。

所以从这里看出,不同的设置有不同的编译链接顺序。

参考博客:https://blog.csdn.net/u012234115/article/details/54233095

静态库,动态库的创建与调用

本人的经验:

    1.不附加与附加的目录或库,用哪个可以。

    2.调用静态库、动态库

    (1)调用静态链接库

使用静态链接库时(如调用里面的函数),首先要把静态链接库的头文件包含在项目的里(即写#include "xxxx.h")。

方法一:复制头文件及lib文件到该项目下,然后在属性-链接器-输入-附加依赖项里加入xxx.lib。

方法二:(附加)包含目录,就是指定lib的h文件路径,然后在属性-链接器-输入-附加依赖项里加入xxx.lib。

方法三:在代码中,添加 #pragma comment(lib, "XXX.lib") 并且填加相应的xxx.h头文件。

     (2).调用动态链接库

          静态调用:

         首先首先要把库用到的头文件包含在项目的里(即写#include "xxxx.h")。

方法一:复制h文件,lib文件和dll文件到该项目下(即项目的cpp文件同目录下)。,或者将dll放在exe文件的同文件夹里,然后在属性里的附件依赖项里加入xxx.lib。

方式二:(附加)包含目录,就是指定lib的h文件路径,再将xxx.dll复制到你的项里(即项目里有cpp文件的那个目录),或者将dll放在exe文件的同文件夹里,然后在属性里的附件依赖项里加入xxx.lib。

我发现在Qt项目里,只能使用附加包含目录和附件库目录,才有效


h头文件 .lib库文件 .dll动态链接库文件关系

  • .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。
    附加依赖项添加的是.lib而不是.dll,若生成了DLL,则肯定也生成了LIB文件。
  • H文件的作用:声明函数接口
  • DLL文件作用:函数可执行代码
  • LIB文件作用:当我们在自己的程序中引用了一个H文件里的函数,链接器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用了。它告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,这也就是为什么需要附加依赖项.LIB文件,它起到桥梁的作用。
  • 如果是生成静态库文件,则没有DLL,只有lib,这时函数可执行代码部分也在lib文件中。

再说一点

目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。

静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。

一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。

参考博客:https://www.cnblogs.com/zqh20145320/p/6772985.html

vs中引用的用法:

我们在开发过程中,经常会使用别人的库,即静态链接库lib或动态链接库

在引用里引用创建为lib或dll的项目,然后再在该项目属性-包含目录里包含头文件路径(或者把头文件都复制到你的项目cpp文件所在文件里)

此时不用再像前文那样设置库目录了与附加依赖项了,就可以直接在项目cpp文件里包含头文件(即写#include "xxxx.h"),直接调用lib或dll项目里的函数了。

转载自:https://blog.csdn.net/Young__Fan/article/details/80528740

包含目录、库目录、附加包含目录、附加库目录、附加依赖项如何使用? 及静态库,动态库的创建与调用和vs里引用的使用相关推荐

  1. 【Linux后端开发必问】操作系统系列(Linux常用命令、文件权限修改、静态与动态库的制作)

    目录 一.说说常用的Linux命令 二.文件权限如何修改 三.静态库和动态库的制作 1.静态库 2.动态库的制作 3.两者优势对比 一.说说常用的Linux命令 1.cd命令:用于切换当前目录: 2. ...

  2. 安卓和Linux动态库一样吗,在Linux环境下编译Android下的最新版ffmpeg+x264单个动态库(.so)...

    最近在mac下用ndk交叉编译最ffmpeg出问题,总是显示用系统的gcc而不是ndk的toolchain的交叉编译gcc来编译的.之前明明没问题的,可能是由于最近升级macOS导致的.由于对这方面实 ...

  3. CMake 常用总结二:CMake 生成静态库与动态库

    引言 CMake 实践帮助我们对 CMake 有一个系统全面的了解,并且有大量示例以供参考,至少在实际项目中可以让我们有能力看懂并修改项目中现有的 CMake . 阅读完 CMake 实践文档,认为自 ...

  4. C++ 包含目录、库目录、附加依赖项详解

    在使用opencv库,以及其他库的时候,经常会需要添加包含目录.库目录.附加依赖项等.现做一个总结吧. 1.包含目录 是.h的头文件所在的目录,如果没有正确包含目录,代码中会出现红色的警告,各种未定义 ...

  5. C/C++库文件全了解(包含静态库、动态库,包含windows、linux,包含dll、lib、so)

    目录 C/C++库文件全了解 一. 前言 二. 名词解释 2.1. windows的静态库:xxx.lib 2.2. windows的动态库:xxx.dll 2.3. linux的动态库:libxxx ...

  6. 动态链接库和静态链接库的相互包含问题及实现

    动态链接库和静态链接库的基本概念请参考 1.<深入理解计算机系统>第七章链接 2.<程序员的自我修养>第4章 静态链接和第7章 动态链接 3. http://blog.jobb ...

  7. Visual studio那些破事。。。(生成静态库、生成动态库、引用静态库、引用动态库)

    共4个小步骤,每个小步骤你都可以新建个VS解决方案,自己跟着步骤跑一下,windows怎么[生成静态库.生成动态库.引用静态库.引用动态库]你就基本明白了@! 文章目录 1.导出静态库.lib(add ...

  8. C++静态库与动态库

    C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  9. c++静态库和动态库

    C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

最新文章

  1. 应有尽有!这可能是最全的 AI 面试笔记了
  2. The first curriculum design experiment report in spring 2019
  3. 视觉特征--ORB系列
  4. 注册/找回密码等功能中发送手机验证码后倒计时效果的实现(基于vue)
  5. 非整数倍数数据位宽转换8to12
  6. Linux下连接Mysql服务器的方式
  7. python:将时间戳转换成格式化日期
  8. 那些不能遗忘的知识点回顾——C/C++系列(笔试面试高频题)
  9. 企业标准化产线建设_机加生产线:标准化管理.ppt
  10. 利用逆矩阵解线性方程组_(非)线性方程组求解库大全
  11. 启动虚拟机报错:无法获取 vmci 驱动程序版本句柄无效解决方法
  12. ewb交通灯报告和文件_简易交通灯控制逻辑电路设计报告
  13. GAMES202 笔记 -Real-Time Ray-Tracing
  14. 【bug记录】 Argument of type ‘AsyncThunkAction<void, string, {}>‘ is not assignable to parameter of type
  15. 13. 模板匹配-cv2.matchTemplate()、cv2.minMaxLoc()
  16. 业务多活架构和分布式CAP实战
  17. python词频统计之红楼梦_用 Python 分析《红楼梦》,后四十回是曹雪芹所写
  18. 2017最新PHP面试题
  19. 嵌入式输入系统应用编程
  20. NYOJ 253LK的旅行(凸包 对踵点)

热门文章

  1. 容器编排技术 -- Kubernetes 架构
  2. YugaByte DB 分布式 开源 关系型数据库介绍
  3. MAC下 Intellij IDEA GO语言插件安装及简单案例
  4. Linxu:磁盘分区
  5. 前端技术基础(一):浏览器相关
  6. 初识人工智能(一):数据分析(二):numpy科学计算基础库(一)
  7. C#LeetCode刷题之#448-找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)
  8. C#设计模式之4-原型模式
  9. windows下的终端工具和产品力
  10. 110_Power Pivot特殊结算日期及财年日期