首页 > 解决方案 > 我可以强制 Visual Studio 不使用特定的第 3 方库吗?

问题描述

我们有一个问题,我们通过 vcpkg 构建的库在一些不使用它的模块中被错误地链接,导致功能不正确。

因为 vcpkg 会自动链接库,所以我们不能简单地将其从 project->linker->additional library 中删除。

有没有办法可以在项目的设置中覆盖它以明确地说“不要链接到 boost_thread-vc140-mt.lib?”

标签: visual-studiovisual-c++vcpkg

解决方案


我可以想到两个选项:a)禁用“自动链接”。将这些行添加vcxproj到您的Directory.Build.props文件中:

  <PropertyGroup>
    <VcpkgAutoLink>false</VcpkgAutoLink>
  </PropertyGroup>

这将禁用自动链接功能。缺点是所有库都不会自动链接,您可能必须将所有必需的库显式添加到项目文件中。但如果这只是一个项目,或许还可以接受。(注意:我在旧项目中使用了 VcpkgAutoLink,它可能不再起作用。)

b) 使用清单。这是一个好主意,我真的很喜欢它的结果。将文件添加vcpkg.json到项目的根目录。此文件包含您要与项目一起使用的库的确切列表。并且vcpkg.json在一个解决方案中可能有不同的文件——当然你仍然必须确保这些版本是兼容的。

使用 b) 您可以将整个boost项目用于大多数项目,但为您的 lib 指定确切的 boost 库和版本。该文件看起来有点像这样:

{
  "name": "mylib",
  "version": "0.9.0",
  "dependencies": [
    { "name": "boost-format" },
    { "name": "boost-preprocessor" },
    { "name": "boost-uuid" },
    { "name": "boost-lexical-cast" },
    { "name": "boost-bind" },
    {
      "name": "boost-serialization",
      "version>=": "1.40.0"
    },
    { "name": "boost-python" }
  ],
  "builtin-baseline": "6610ec0e042db81155f7ae72168f92f8a7741c2b",
  "overrides": [
    {
      "name": "python3",
      "version": "3.7.3-3"
    }
  ],
  "homepage": "https://izts09.izt.loc",
  "supports": "windows"
}

例如,“覆盖”将让您降级(或升级)特定版本要求。

我自己仍在尝试“清单”模式,但它很有希望。VCPKG_FEATURE_FLAGS=manifest顺便说一句,您必须通过例如设置显式启用“清单”,AFAIK 。


推荐阅读