Linux 中对应的库为 Visual Studio 中的 /MTd 是啥?
Posted
技术标签:
【中文标题】Linux 中对应的库为 Visual Studio 中的 /MTd 是啥?【英文标题】: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,然而,这不是问题的本质。
***.com/questions/312312/…
那是因为您遇到的问题出在代码中,与标志无关。拥有调试信息(当您使用-g
标志时生成)将帮助您调试应用程序,方法是使用调试器并单步执行代码,或者使用诸如Valgrind 之类的工具来查找程序中的内存覆盖.除了这么说,没有任何代码我们也无能为力,最好是Minimal, Complete, and Verifiable Example。
【参考方案1】:
您需要修复您的代码。程序的行为与 C++ 运行时库的调试和发布版本不同(这是由 /MT 和 /MTd 控制的)意味着您在 您的 程序中存在错误。很可能是未定义的行为。
首先将编译命令更改为g++ -O3 -Werror -Wall -Wextra -pedantic -o test test.cpp
并研究编译器输出。如果幸运的话,您会看到一些警告变成了错误。
【讨论】:
【参考方案2】:你有两个问题。
您的 g++ 编译命令是发布模式。使用-g
选项使用调试符号进行编译。
您需要解决在 Windows 上使用 /MT
在发布模式下无法获得正确信息的原因。
【讨论】:
以上是关于Linux 中对应的库为 Visual Studio 中的 /MTd 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual c++ 中处理 SEHException?