visual-studio - 我可以强制 Visual Studio 不使用特定的第 3 方库吗?
问题描述
我们有一个问题,我们通过 vcpkg 构建的库在一些不使用它的模块中被错误地链接,导致功能不正确。
因为 vcpkg 会自动链接库,所以我们不能简单地将其从 project->linker->additional library 中删除。
有没有办法可以在项目的设置中覆盖它以明确地说“不要链接到 boost_thread-vc140-mt.lib?”
解决方案
我可以想到两个选项: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 。
推荐阅读
- airflow - 无法为气流初始化数据库 docker-compose 权限被拒绝
- java - 以这种方式调用方法在 Java 中意味着什么?
- c# - C# - 在 Windows 任务计划器中生成一次性任务
- ios - 如何使用 Firebase App Distribution for ios
- c++ - 如何找到不是内存泄漏的内存泄漏?
- c# - 简化多控制的 switch 语句
- python - [Python]对相似的句子进行分组,并从每种类型中添加一个句子到列表中
- java - 具有 maxWaitTime 的 receiveMessages 方法未按预期工作
- javascript - 数据已存在于 Google 表格中时的通知
- docker - 通过 neo4j-admin 导入数据后无法重启 neo4j docker