我们在 VS 中创建 Win32 控制台应用程序,vs 会为解决方案创建默认地创建 4 个 filters(资源管理器中没有对应的目录和文件夹):

  • 头文件:一般为 .h 文件
  • 外部依赖项
  • 源文件:一般为 .cpp文件
  • 资源文件

1. 外部依赖项 & 资源文件

  • 外部依赖项:C++ 外部依赖项有很多,大部分都是静态库文件,编译的时候会递归关联起来生成可执行文件,所以可执行文件才会大很多

    编译的时候: 外部依赖项都是一个填充地址 , 比如 你的代码里调用 外部依赖函数地址 Extern_funA 。

    • 预编译的时候展开头文件
    • 编译生成obj文件的时候,Extern_funA 就是一个填充地址 比如 0x00 00 00 00
    • 链接的时候基地址重定位生成对应的 Extern_funA 地址。
    • 链接的时候会根据你的工程配置想一个去查找 DLL 导出符号表,发现没有找到 Extern_funA 。那么就会出错,说无法定位外部符号。

    右键【源文件】,选择【添加 ⇒ 新建项】,比如此时我们创建,test.cpp 文件,只需 include 一个文件:


    #include <iostream>

    此时重新点开 【外部依赖项】filter,便会看到引入了相当多的库文件。

  • 资源文件:主要是你用到的一些程序代码以外的东西,比如图片之类,或者菜单、工具栏之类的。

2. 库目录 & 附加依赖项

库目录只是查找目录,类似环境变量 PATH;具体用哪一个需要指明的,如果不在附加依赖项里填上,就需要在代码里用

#pragma comment(lib, “xxx.lib”)

来手动指定了。你写代码读写一个文件需要写明文件名吧,这个文件名就相当于那个lib , 但读写这个文件可以不写全路径,就是因为有工作目录(working directory)的存在。

3. 添加依赖项目

VS2013 添加依赖项目

  • 1、新建解决方案,项目A

  • 2、为项目A添加一个依赖项目B,项目B做为静态lib被项目引用,

    项目B创建步骤如下:

    • 选择菜单”文件”->新建->项目,弹出“新建项目”对话框;

    • 左侧列表选择Visual C++,右侧列表选择win32控制台应用程序,

      对话框下面输入名称,选择位置,解决方案选择添加到解决方案,确定。

    • Win32应用程序向导,下一步,选择应用程序类型为静态库,

      添加公共头文件以用于选择MFC(根据实际情况选择,因为项目需求<nb30.h>编译需要选择MFC),完成。

  • 3、项目配置,项目A右键选择属性,选择通用属性,引用->添加新引用->选择项目B;

    引用项目B的头文件目录,步骤如下:配置属性->VC++目录->包含目录:添加项目B头文件路径..\B\Header。

其中编译的时候会出项目A引用项目B的接口无法解析,可能是3步骤没有做。

vs 外部依赖项、附加依赖项以及如何添加依赖项目的更多相关文章

  1. IDEA添加项目依赖(将Tomcat中的servlet-api.jar添加到项目中去)

    File -> project structure -> Modules -> 右侧Dependencies -> 然后点加号把配置好的Tomcat的依赖包加进去

  2. [转]使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 。

    使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://re ...

  3. [整理]VS2010中如何添加“依赖","库目录","包含目录"

    VS2010中如何添加“依赖","库目录","包含目录" 1. 添加编译所需要(依赖)的 lib 文件[解决方案资源管理器]“项目->属性-&g ...

  4. 通俗的讲,就是高层模块定义接口,低层模块负责实现。 Bob Martins对DIP的定义: 高层模块不应依赖于低层模块,两者应该依赖于抽象。 抽象不不应该依赖于实现,实现应该依赖于抽象。

    通俗的讲,就是高层模块定义接口,低层模块负责实现. Bob Martins对DIP的定义: 高层模块不应依赖于低层模块,两者应该依赖于抽象. 抽象不不应该依赖于实现,实现应该依赖于抽象. 总结出使用D ...

  5. 依赖注入及AOP简述(一)——“依赖”的概念 .

    一.入门:依赖注入 作为一种全新的设计模式理念,“依赖注入”这个词汇在软件设计开发中已经是越来越耳熟能详了,而各种流行于开源社区的“依赖注入框架”,也越来越多的被当作软件工程开发过程中使用的基础框架. ...

  6. 学习Android过程中遇到的问题及解决方法——AS为xutils添加依赖

    在使用xutils时遇到不能添加以来的问题,花了很长时间终于解决,网上添加依赖的方法很多,在此针对个人出现的问题作下笔记. 我本想使用jar包,因为在使用smartImageView时是用的jar包来 ...

  7. Maven项目打Jar包,如何添加依赖

    之前介绍了使用spring-boot-maven-plugin插件打jar包,会把所有的依赖文件都导入,然后变成了一个可执行的jar包.这样的不好的地方就是,我实际上并不需要把依赖的jar包也打入到生 ...

  8. m2eclipse插件——添加依赖不显示搜索结果

    使用Eclipse,安装m2eclipse插件之后,选中Maven项目的pom文件,添加依赖,点击“Add Dependency”的时候,输入要检索的jar包名称,search result却一直为空 ...

  9. 【spring cloud】spring cloud子module的pom文件添加依赖,出现unknown问题【maven】

    spring cloud项目,一般都是父项目中有多个子服务,也就是子module模块. 如下图: 问题描述:在父项目中引用了常用的jar包,例如,引入了spring boot的依赖,那么在子项目中引入 ...

随机推荐

  1. js31---观察者模式

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. 第6章4节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串

    在第2节中我们看到了MonkeySourceNetwork是怎样从Socket中获取MonkeyRunner发送过来的命令字串的,可是最后怎样将它翻译成事件的代码我们还没有进行分析,由于在那之前我们还 ...

  3. [React & Testing] Simulate Event testing

    Here we want to test a toggle button component, when the button was click, state should change, styl ...

  4. 关于android主线程异常NetworkOnMainThread不能訪问网络

    今天在学习的过程中遇到了NetworkOnMainThread的异常,关于这个异常问题在android sdk 4.0版本号上,这个问题可能比較常见,查了许些资料大多都是大概解说原因,可是没有解说到详 ...

  5. 1.11 Python基础知识 - 序列:元组

    元组(tuple)是一组有序系列,元组和列表是否相似,但是元组是不可变的对象,不能修改.添加或删除元组中的元素,但可以访问元组中的元素 元组的定义: 元组采用圆括号中用逗号分隔的元素 元组的基本操作和 ...

  6. JS/CSS 全屏幕导航 – 从上到下动画

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  7. 修饰器&高阶组件

    一.修饰器 1.类的修饰 修饰器是一个函数,用来修改类的行为 function testable(target) { target.isTestable = true; } @testable cla ...

  8. Loading half a billion rows into MySQL---转载

    Background We have a legacy system in our production environment that keeps track of when a user tak ...

  9. JS实现按下按键触发点击事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. pragma pack,字节对齐

    关于字节对齐 pragma pack 一. 测试代码: // packTest.cpp : Defines the entry point for the console application. / ...