【问题标题】:MT and MD on LinuxLinux 上的 MT 和 MD
【发布时间】:2021-07-14 08:47:30
【问题描述】:

我很好奇为什么在 Windows 上有这么多关于 MT 和 MD 而没有人谈论 linux。在 linux 中,afaik 有 libc.so 作为 MD 等价物,而 libc.a 作为 MT 等价物。

由于可以静态或动态链接 c 运行时,并且您可以在构建单个可执行文件时将静态和动态库链接在一起,因此您必须遇到与组合 MT 和 MD 库或多个库相同的问题Windows 上的 c 运行时版本。

所以我的问题是,linux 上是否存在相同的问题,或者 linux 上是否有一些系统/模式可以防止这些问题?在我看来,这些问题与 Windows 上的问题相同,只是很奇怪我找不到太多关于这些问题的信息。

【问题讨论】:

  • 是的,同样的问题也存在,在 Linux 上静态链接到 libc 或 libstdc++ 非常罕见

标签: c++ linux linker libc crt


【解决方案1】:

/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 上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多