我很好奇为什么在 Windows 上有这么多关于 MT 和 MD 的内容,而没有人在谈论 linux。在 linux 中,afaik,有 libc.so 作为 MD 等价物,libc.a 作为 MT 等价物。
由于可以静态或动态链接 c 运行时,并且您可以在构建单个可执行文件时将静态库和动态库链接在一起,因此您必须遇到与组合 MT 和 MD 库或多个库相同的问题Windows 上的 c 运行时版本。
所以我的问题是,linux 上是否存在同样的问题,或者 linux 上是否有一些系统/模式可以防止这些问题?在我看来,这些问题和 windows 上的一样,奇怪的是我找不到太多关于这些问题的信息。
答案 0 :(得分:0)
/MT
和 /MD
并不是真正的 Windows,而是 Visual Studio。虽然两者都来自微软,但有一个非常重要的区别。与 Linux 上的典型情况相比,这两种产品的分离程度要大得多。
特别是在 Linux 上,一直不清楚 libc
是操作系统的一部分,还是 C 编译器的一部分。这并不重要,尽管 C 并没有发展那么快。
Linux 上真正的问题是 libstdc++
,它依赖于 libc
,因此被拖入了相同的依赖问题。
结果是 Visual Studio 2019 可以为 Windows XP 编译 C++20 代码,并且使用 /MT
就可以了。但是在 Debian 10 上编译,您将依赖于 Debian 10 libc,它甚至无法在 Debian 9 上运行。