【发布时间】:2018-10-04 18:19:56
【问题描述】:
我使用 Visual Studio 2017(但适用于 2010+ 的任何版本)并且我一直在尝试想出一种方法来组织我的调试/发布库,以避免我们得到的所有这些链接错误, 混合不同版本的运行时库时。从概念上讲,我的目标似乎很简单,但我还没有找到实现我想要的一切的方法。
这是我拥有的,以及我想做的:
常用库:
ComLib1
ComLib2
...
Exe1:
ComLib1
ComLib2
...
Exe1Lib1
Exe1Lib2
...
exe1
Exe2:
ComLib1
ComLib2
...
Exe2Lib1
Exe2Lib2
...
exe2
所以 2 个不同的可执行文件,使用一组通用库和特定于 Exe 的库。
我想创建 4 种不同的构建配置。
Cfg1:
这将包含所有库(包括公共库)的调试信息/非优化代码。
Cfg2:
这将包含所有 Exe 特定库的调试信息/非优化代码,但不包含公共库。
Cfg3:
这将包含一些库的调试信息/非优化代码库和其余库的非调试信息/优化库的组合。
Cfg4:
你猜到了。这将包含所有非调试信息和优化代码。
我的第一次尝试基本上是为每个库创建 2 组二进制文件;一个在调试模式下编译(使用 /MTd /Od),另一个在发布模式下编译(/MT /O2)。然后在我的各种配置中选择一个或另一个版本。这对于 Cfg1 和 Cfg4 来说很好(因为所有运行时库自始至终都是一致的),但遇到了 Cfg2 和 Cfg3 的那些链接错误。
我明白为什么会出现这些错误。我只是不确定如何解决这些问题,我认为这是一种常见的情况。也许 Cfg3 并不常见,但我认为 Cfg1,2 & 4 是。
感谢您的意见。
编辑
我真的不认为我需要添加这些信息,因为我想让我的问题简短(呃)。但如果它可以帮助澄清我的目标,我会把它加起来。
这是一个实时模拟器。我无法在典型的 Debug 配置中运行每个库,因为我无法维护 Realtime。我很少需要调试公共库,因为它们主要与服务器/IO 任务相关。 Exe 库主要包含数学/热力学,是我最常花时间的地方。但是,1 Exe lib 包含反应堆中子学,这涉及大量计算。我们通常将其视为黑盒(神秘的供应商提供的代码),我几乎总是希望使用优化代码(典型的发布设置)来运行它。
【问题讨论】:
-
我必须阅读到底部才能获得关于您的工具链可能是什么的最轻微提示。稍后我将添加一个 Visual Studio 标记,但这是应该在此类问题的第一段左右出现的内容。
-
感谢您的建设性反馈。我同意人们拒绝投票。我只是讨厌他们没有解释就这样做。不管目标是谁。
-
有趣的是我没有也没有投反对票。我对 Visual Studio 的了解还不够深入,无法评价这个问题的好坏。
-
Cfg2 和 Cfg3 可能有效,但可能导致未定义的行为,并且支持极差(如您所见)。我强烈建议避免这些配置,除非在调试代码时绝对有必要获得可接受的性能。
标签: c++ visual-studio