zoukankan      html  css  js  c++  java
  • 各种方法配置 Visual Studio 第三方库

    配置第三方库如Opencv,或者软件开发商提供的SDK时,一般需要配置三个文件:

    头文件(.h),引入库(.lib)文件(也称“导入库文件”),动态链接库(.dll)文件

    下面以度申科技的相机sdk配置为例,简述一下这三个文件的配置方法。

    在开发过程中笔者参考了几篇博客,最后在厂商技术人员的帮助下,终于弄清楚了第三方库的配置方法,在此表示感谢。

    参考文章:

    静态库和动态库的区别,lib文件和dll文件的配置方法_Sean_新浪博客 http://blog.sina.com.cn/s/blog_6dd65c6f0100vveq.html

    VS2005 使用/导入lib 、 dll库 - pacewalker的专栏 - CSDN博客 http://blog.csdn.net/pacewalker/article/details/7236701

    关于属性表可参考下面文章:

    OpenCV在Visual Studio中的属性表配置方法(通用)_百度文库 https://wenku.baidu.com/view/4eb66733ba0d4a7303763a18.html

     

    1.配置头文件的方法

    1)在属性表中添加附加包含目录绝对路径。

    Image 1

    2)在属性表中添加附加包含目录相对路径

    上图中的路径是SDK的安装路径,即绝对路径,如果想一劳永逸,比如想让这个项目文件夹拷贝到其他没有装SDK的机器上仍能够运行,就把.h文件直接拷贝到项目路径下。这时候就要设置头文件的相对路径,来个例子:

    头文件目录如下:

    image

    属性表中设置的相对路径如下:

    image

    VS会在项目路径下搜索include文件夹,之后按照配置的相对路径就能找到头文件。

    3)在项目头文件中直接用include语句引入,无需配置属性表

    绝对路径表示如下:

    相对路径表示如下:

    #include "../../../library/Visual C++/include/DVPCamera.h"

    其中一个".."表示一个上一阶目录,有三个".."表示当前目录再往前三个目录,所以他的意思就是调用当前目录再往前三个目录下的inclued文件夹中的头文件。头文件实际的路径是

    D:Program Files (x86)DVP2 SDKlibraryVisual C++include

    项目目录为

    D:Program Files (x86)DVP2 SDKSampleVC++MultipleCamera

    因此从MultiCamera向上三层是DVP2 SDK,所以从DVP2 SDK目录下的library中层层向下找到目标头文件。这种写法是因为sdk会被安装到那个目录下是不确定的,但是sdk目录之间的层级关系是固定的。

    下面的情况相对路径可表示为(MultiCamera为项目目录):

    #include "include/subdirectory/DVPCamera.h"

    也可以写作

    #include "includesubdirectoryDVPCamera.h"

    实际测试发现include语句中‘’和‘/’没有区别,都能通过编译。

    image

    2、引入库.lib文件配置方案

    与头文件配置类似,引入库也分相对路径和绝对路径。

    1)在属性表中添加附加库目录和库文件名称

    绝对路径:

    image

    相对路径:

    其中一个".."表示一个上一阶目录。

    imageimage

    添加lib文件名:

    在链接器-输入-附加依赖项中添加文件名即可。

    image

    2)在项目cpp文件中直接用#pragma comment语句引入,无需配置属性表

    使用语句添加引入库的好处就是无需配置多个属性表,

    不管是debug模式还是release模式,不管是64位还是32位,几行代码通吃。

    相对路径:

    #ifdef _M_X64
    #pragma comment(lib, "../../../VC++/DVPCamera64.lib")
    #else
    #pragma comment(lib, "../../../VC++/DVPCamera32.lib")
    #endif

    绝对路径:

    #ifdef _M_X64
    #pragma comment(lib, "D:/Program Files (x86)/DVP2 SDK/library/Visual C++/lib/x64/DVPCamera64.lib")
    #else
    #pragma comment(lib, "D:/Program Files (x86)/DVP2 SDK/library/Visual C++/lib/x86/DVPCamera.lib")
    #endif

    此处注意,直接从地址栏复制的路径中分隔符是‘’,而comment指令中的分隔符是‘/’,需要做一下修改,否则会报错。

    或者也可以用‘\’,即

    #pragma comment(lib, "D:\Program Files (x86)\DVP2 SDK\library\Visual C++\lib\x64\DVPCamera64.lib") 

    image

    另外,如果你使用了#pragma comment 语句,记住把属性表里的配置项删除掉。

    如果使用了#pragma comment 语句,但是属性表里lib库只给了文件名而配置给库路径,也会报错。

    两者是在编译链接时系统都会查找的,任何一个有问题就会报错。

    3、动态链接库文件

    根据文章:

    静态库和动态库的区别,lib文件和dll文件的配置方法_Sean_新浪博客 http://blog.sina.com.cn/s/blog_6dd65c6f0100vveq.html

    在程序运行时系统会自动搜索相应的dll文件,搜索的顺序依次分别为:
    1、程序的执行目录(exe目录)
    例如:F:VC++SourceCodeLesson19Dll1Dll1debug
    1、当前目录;
    例如:F:VC++SourceCodeLesson19Dll1Dll1
    2、系统目录;
    依次是:C:WINDOWSsystem32;C:WINDOWSsystem;C:WINDOWS
    3、path环境变量中所列出的路径。

    最稳妥的方式就是把dll文件放到项目目录Debug或Release文件夹下,而且不能有子目录。下面这种方式就是把dll文件放到子目录下,结果会报错。

    image

    否则会报错如下:

    image

  • 相关阅读:
    微信外包就找北京动点飞扬软件(长年承接开发微信服务号,订阅号)
    北京动点飞扬软件招募【Android全职工程师】
    win8外包公司——技术分享:参数传递
    微软官方的Windowsphone社区
    Windowsphone8外包团队——wp8控件学习资源整理
    Android外包团队——Jquery乱码解决方案
    Flex外包公司——Flex案例展示
    Flex外包公司——案例汇总
    FLEX外包团队:Flex例子DEMO源码
    flex外包团队—北京动点软件:推荐一本不错的Flex书籍
  • 原文地址:https://www.cnblogs.com/oucsheep/p/7475555.html
Copyright © 2011-2022 走看看