VS2005~2012项目中添加lib库、include文件工程设置

应用程序使用外部库时需要进行加载,两种库的加载本质上都是一样:提供功能和功能的定义。vs2005~vs2012 c++ 项目设置外部库方法如下:


1. 添加编译所需要(依赖)的 lib 文件
在“项目->属性->配置属性->连接器(link)->输入(input)->附加依赖项(
Additional dependencies)”里填写“x.lib”,多个 lib 以空格隔开。等同于“#pragma comment(lib,"*.lib") ”语句。这个过程如果出错会出现link error,大概是“未定义的函数XXX”。

2. 添加库(libs)文件目录

  附加库目录 仅仅包含目录,只是告诉IDE,搜索没有指定路径的库文件时,也搜索这里。假如你用 #pragma comment(lib,"a.lib")的时候;此时就搜索a.lib的路径列表就包含这个路径。
       例如:
    #ifndef _UNICODE
        #ifdef _DEBUG
            #pragma comment(lib,"..\\file\\lib\\nafxcwd.lib")
        #else
            "..\\file\\lib\\nafxcwd.lib")
        #endif
    #else
        "..\\file\\lib\\uafxcwd.lib")uafxcw.lib"#endif

方法 1:项目->属性->配置属性->连接器(link)->常规(General)->附加库目录(Additional library path)"。此处设置的是“include文件的相对路径”,以proj文件为基准。

附加库目录的目录路径不需要添加双引号,路径分隔符为’/’或’/’,不必考虑反斜杠’/’的转义。多个路径之间以分号分隔。

方法 2:[菜单]“工具->选项->项目和解决方案->c++ 目录”,选择对应平台,然后添加所需“库文件”目录"。

此方法类似于设置环境变量,主要是为程序设置搜索的库目录,真正进行库加载还需要进行第一种设置!

这个过程如果设置错误,会link error,提示"找不到XXX.lib"。

3. 添加包含(include)文件目录

方法 1:[解决方案资源管理器]“项目->属性->配置属性->c/c++->常规->附加包含目录"。此处设置的是“include文件的相对路径”,以proj文件为基准。

这里需要注意的是(1)路径必须指向头文件所在的子文件夹,而不能直到父文件夹就结束(2)每个路径不需要加上双引号,输入了之后, vs2008会自动加上双引号,如果自己加可能vs2008无法识别双引号(3)如果是多个路径,路径直接用“;”隔开。

(4)目录路径不需添加双引号,路径分隔符为’/’或’/’,不必考虑反斜杠’/’的转义。多个路径之间以分号分隔。

方法 2:[菜单]“工具->选项->项目和解决方案->c++ 目录”,选择对应平台,添加所需“include文件”目录"。此方法 类似于设置环境变量。

4. 导入库(import)

在“项目->属性->配置属性->连接器->高级->导入库”填写需要生成的导入库。


5.添加工程引用的dll动态库:把引用的dll放到工程的可执行文件所在的目录下。

相对路径的设置
在VS的工程中常常要设置头文件的包含路径,当然你可以使用绝对路径,但是如果你这样设置了你只能在你自己的机器上运行该工程;如果其他人拷贝你的工程到其他机器上就可能无法运行,这个是因为你在建工程时可能把工程放在了E:盘,但是其他人可能会把工程放在其他根目录下,这样会导致找不到头文件问题。
对于新手,在设置绝对路径时往往会犯浑,他们不清楚这里的“相对”究竟是以什么位置为起点。其实这里的相对路径就是相当于工程文件(X.vcproj)为起点零计算出的能找到包含所需头文件(也就是找包含所需头文件的include目录)的路径。
例如你的工程文件(Count.vcproj)所在目录路径为:
E:\projects\Count\Count\Count.vcproj
该工程需要包含一个图片参数,该图片所在路径如下:
E:\projects\Count\pic\pic01.jpg
这里程序中的相对路径设置如下:
..\\pic\\pic02.jpg

程序代码中的参数路径设置时要用双斜线:
例如:
#include "..\TestLib\lib.h"
#pragma comment(lib,"..\\debug\\TestLib.lib");

注:在字符串中要用"\\"才能显示出,要考虑到转意字符"\",在#include中的进行设置的时候则不需要考虑转意字符。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结