我们在 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. 添加依赖项目
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步骤没有做。