在复杂工程中,一个项目的运行可能需要众多依赖库的支持,例如ORBSLAM需要g2o、Opencv等。此时一个良好的环境依赖部署方法对工程的条理性至关重要,下面详细阐述
1 构造依赖目录
|--3rd(ThirdParty) // 依赖库根目录 |--LibraryA // 依赖库A |--include // 头文件目录 |--lib // 存放动态库或静态库 |--LibraryB // 依赖库B |--include // 头文件目录 |--lib // 存放动态库或静态库 ...
2 构造属性表
VS中点击“属性管理器”,在对应的编译模式
Release x64 Release x32 Debug x64 Debug x32
右键项目,新建属性表,双击属性表进行配置。如图所示,主要配置3个位置
1、VC++目录下的“包含目录”和“库目录”,分别对应上述某依赖库的include和lib文件夹 2、链接器输入下的“附加依赖项”,对应lib文件夹中的静态链接库
注意:推荐使用相对路径便于移植。使用属性表也是为了便于环境移植。
3 配置环境变量
上述只配置了静态链接库和头文件,部分工程还会使用动态链接库。
dll文件的配置无法通过属性表,只能通过项目->属性->调试->环境实现dll的配置差异。在VS中添加环境变量可以避免设置系统环境变量,使PC工作环境不至于过于冗杂。
程序运行需要加载dll时,首先它会在自身周围,也即当前目录下寻找,找不到时再去更大的环境中找。如果不设置vs环境,那么程序就会直接去系统环境中寻找dll,相反,如果设置了vs环境,系统环境就会被忽略,无论vs环境下能否找得到。
4 对比项目差异
可以通过例程属性管理器相应属性页中的依赖库,来辨析自身工程缺少哪些库。在缺少库的时候,会出现典型的LINK2001 无法解析的外部符号 错误,在缺少头文件时,则会出现无法打开xxx.h的错误,根据这两种错误形式可以筛查项目缺少哪些依赖。