【发布时间】:2013-01-03 18:33:38
【问题描述】:
在我的 VS2012 中,我有 4 个可用的工具集:v90、v100、v110 和 v110_xp。我用两个项目 testlib(一个静态库)和 testexe(控制台应用程序)做了一个简单的测试。该接口只是一个带有签名void test() 的函数。结果:
- testlib(v90), testexe(v90 以外的任何东西) -> 不链接
- testlib(v100), testexe(v110 or v110_xp) -> 链接
然而,我觉得 v100 和 v110 会链接起来有点奇怪,所以我试图让场景复杂一点。现在我的方法看起来像这样:std::map<std::string, std::string> test(const std::string& arg)。正如预期的那样,testlib(v100) 和 testexe(v110) 没有链接 (mismatch detected for '_MSC_VER')。
但 testlib(v110) 和 testexe(v110_xp) 仍然可以链接,并且生成的 exe 可以在 Windows XP 上运行。这只是偶然还是这是受支持的情况?如果这只是偶然,那么欢迎使用仅使用 v110_xp 中提供的功能并破坏这种兼容性的示例代码。我想知道是否应该将我的库的两个版本部署到我的客户,或者只使用 v110 编译的版本。
【问题讨论】:
-
您遗漏了 2012 年 11 月的 CTP,它至少试图接近实现 C++11 标准(您知道这很难;问 Herb =P)。
-
听起来您正在从库中公开基于标准的对象(例如 std::string 等),并希望它与基于不同工具链的所述库的客户端“正常工作” .即使它们是特定于供应商的(在这种情况下,全部来自 MS),也不能保证仅名称修饰算法的差异,更不用说完整的 ABI 对于任何基于 lib 的代码实现。无关:顺便说一句,我不知道 2012 带有 v9 工具链。你有vs2008在同一台机器上吗?
-
是的,我在这台机器上安装了 vs2008、vs2010 和 vs2012 - 我的问题的介绍可能有点误导。
标签: c++ visual-c++ visual-studio-2012 msvcrt