zoukankan      html  css  js  c++  java
  • 可移植的配置visual studio工程第三方库

    现在编程有太多的好用的第三方库,例如

    • 计算机视觉方面的opencv
    • c++的扩充库boost
    • 特殊的第三方库,相机库,通讯库等

    使用这些库给我们带来了极大的便利,同时也有很多困扰。这个工程在我电脑上明明很好用的,但是为什么在你电脑上就没法编译呢?

    这是工程配置的不好造成的。很多人在配置工程引用文件的时候使用绝对地址,例如配置opencv的include文件,配置地址为C:opencvuildincludeopencv。但是在另一个电脑上,opencv可能不在这个地址,这时候vs就无法找到相应的头文件,所以会造成编译失败。

    那么怎么解决呢?

    第一种解决方法就是vs提供的nuget来对引用的库进行管理。类似*unix系统里的包管理,他会管理项目所需要的库文件,以及其依赖项。

    这里以opencv为例子讲解。选择工具->NuGet程序包管理器->管理解决方案的NuGet程序包。

     

    这里可以看到我使用了四个程序包,在你的解决方案里应该是没有程序包的。点击联机,去搜索需要的程序包。

    这里我在右上角输入了opencv进行搜索,可以看到搜索出了许多关于opencv的程序包。选择你需要的程序包。由于我已经安装过了,所以可以看到一个对勾。如果你没有安装,就如我选择的opencvsharp3,点击安装。

    之后会自动下载,并安装,然后让你选择你需要使用程序包的工程。就完成了。

    之后在解决方案上右键,选择Enanble NuGet Package Restore,就可以启用NuGet程序包。然后就可以在项目里使用opencv了。而且拷贝到其他电脑上也只需要恢复一下就可以使用。

    方法二:

    但是方法一需要有人在nuget上维护你需要的库,如果没有的话就没办法。拿我的在做的项目来说,opencv的库是有的,但是相机的库就没有。那么还是需要自己手动管理库文件,但是稍微修改以下配置方法。就是把需要的第三方库放在解决方案文件夹里,然后使用相对路径的方式进行引用。

    对于包含目录(include),原来的配置方式和相对路径配置方式对比如下。这里,相对路径是相对于工程文件(*.vcxproj)所在的目录。两个点(..)表示当前目录的上一个目录,这里的意思就是在工程文件上一个目录里的那一堆路径下。这样配置完之后就可以在不同的电脑上使用了。

    对于用于链接的库文件(*.lib)也是同样的道理,然后在将需要使用的.lib文件添加到链接器->输入->附加依赖项。

    通过上面两个配置,将解决方案需要用到的库文件都配置完成,并且可以在不同的电脑上进行编译。

    可能遇到的错误:

    1.NuGet Error:Unable to find version '2.4.11' of package 'OpenCV.overlay-x64_v120_Release'.

    进入命令行的NuGet 包管理器控制台,然后手动安装这个包。

    Install-Package OpenCV.overlay-Win32_v140 -Version 2.4.11

    解决方法来源:https://libraries.io/nuget/OpenCV.overlay-Win32_v140_Debug

    只是在这里,他安装的指明了debug版本,我试了不好用个,就删掉了

    2.NuGet Error:未知命令:“overlay”

    删除解决方案下的.nuget文件夹,重新生成解决方案。

    解决方案来源:https://blog.csdn.net/u011185952/article/details/52577620

    解决方案来源的来源:https://social.msdn.microsoft.com/Forums/vstudio/en-US/6eee7078-d3d1-4c95-b5d5-6753228888e5/opencvtargets-error-nuget-error-overlay?forum=vssetup

  • 相关阅读:
    package、import、java及javac的相关介绍(转)
    Android开发之大位图二次採样压缩处理(源码分享)
    ubuntu 14.04 使用极点五笔输入法
    HBase概念学习(七)HBase与Mapreduce集成
    JS中setTimeout()的使用方法具体解释
    IntelliJ Idea 经常使用快捷键列表
    公有云与私有云的差别(转)
    jbpm入门样例
    android之PackageManager简单介绍
    WebService究竟是什么?
  • 原文地址:https://www.cnblogs.com/huipengly/p/9064151.html
Copyright © 2011-2022 走看看