【问题标题】:What's the corresponding library in Linux as /MTd in Visual Studio?Linux 中对应的库为 Visual Studio 中的 /MTd 是什么?
【发布时间】:2016-03-31 13:19:12
【问题描述】:

问题来了:
我在 Windows 上写了一段代码。当使用/MT 选项时,答案是错误的。当简单切换到/MTd时,答案是正确的。
现在我正在移植将此代码移植到 Linux。使用以下命令答案是错误的:g++ -Ofast -o test test.cpp。另外,我很确定这是唯一剩下的问题。
我已经安装了libc6、libc6-dbg、libc6-dev、libstdc++-4.8-dev、libstdc++6 和 libstdc++6-4.8-dbg。
这种情况有什么问题,我该如何解决?

更新:问题已解决。代码可以通过各种优化选项在 Windows(调试和发布模式)和 Linux 上正确运行。存在变量初始化问题。谢谢大家。

【问题讨论】:

  • 这是我第一次看到porting 被称为transplanting。让我吃惊的好工作:)
  • 如果要构建程序的调试版本,请在使用gcc 或g++ 构建时添加-g 标志。就是这样。
  • @JoachimPileborg,然而,这不是问题的本质。
  • 那是因为您遇到的问题出在代码中,与标志无关。拥有调试信息(当您使用-g 标志时生成)将帮助您调试应用程序,方法是使用调试器并单步执行代码,或者使用诸如Valgrind 之类的工具来查找程序中的内存覆盖.除了这么说,没有任何代码我们也无能为力,最好是Minimal, Complete, and Verifiable Example。

标签: c++ linux compilation runtime


【解决方案1】:

您需要修复您的代码。程序的行为与 C++ 运行时库的调试和发布版本不同(这是由 /MT 和 /MTd 控制的)意味着您在 您的 程序中存在错误。很可能是未定义的行为。

首先将编译命令更改为g++ -O3 -Werror -Wall -Wextra -pedantic -o test test.cpp 并研究编译器输出。如果幸运的话,您会看到一些警告变成了错误。

【讨论】:

    【解决方案2】:

    你有两个问题。

    1. 您的 g++ 编译命令是发布模式。使用-g 选项使用调试符号进行编译。

    2. 您需要解决在 Windows 上使用 /MT 在发布模式下无法获得正确信息的原因。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 2023-01-20
      • 2011-06-11
      • 1970-01-01
      • 2015-10-31
      相关资源
      最近更新 更多