c++ - Linux 上的 MT 和 MD
问题描述
我很好奇为什么 Windows 上有这么多关于 MT 和 MD 而没有人谈论 linux。在 linux 中,afaik 有 libc.so 作为 MD 等价物,而 libc.a 作为 MT 等价物。
由于可以静态或动态链接 c 运行时,并且您可以在构建单个可执行文件时将静态和动态库链接在一起,因此您必须遇到与组合 MT 和 MD 库或多个版本相同的问题c 在 Windows 上运行时。
所以我的问题是,linux 上是否存在相同的问题,或者 linux 上是否有一些系统/模式可以防止这些问题?在我看来,这些问题与 Windows 上的问题相同,只是奇怪的是我找不到太多关于这些问题的信息。
解决方案
/MT
并且/MD
不是真正的 Windows,而是 Visual Studio。虽然两者都来自微软,但有一个非常重要的区别。这两种产品的分离度远远超过 Linux 上的典型情况。
libc
特别是,在 Linux 上,它是操作系统的一部分,还是 C 编译器的一部分,从来都不清楚。这并不重要,尽管 C 并没有发展得那么快。Linux 上的真正问题是libstdc++
,它依赖于libc
,因此被拖入了相同的依赖问题。
结果是 Visual Studio 2019 可以为 Windows XP 编译 C++20 代码,并且/MT
可以正常工作。但是在 Debian 10 上编译,您将获得对 Debian 10 libc 的依赖,它甚至无法在 Debian 9 上运行。
推荐阅读
- python - 每个条目而不是全部的 SQL 条件计数
- android - Android 手机在读取消息后才检测到彩信
- java - 如何使用哈希图迭代和填充 writeFields() 参数
- multithreading - 负载下降后,线程会粘在周围
- reactjs - Recoil.js:在 React 实例之间共享状态?
- python - 有什么方法可以在 Windows 中使用命令行安装 Python。?
- pytorch - 使用多处理在 CPU 上运行变形金刚预测
- firebase - 将 Firebase 函数下载或同步到本地环境
- file - 一个文件到不同文件的结果之间的 VSCode 超链接:行
- arrays - 如何在 Kotlin 中调试以下错误?