【问题标题】:Add /MT compile flag to project将 /MT 编译标志添加到项目
【发布时间】:2014-07-22 10:24:33
【问题描述】:

我有 VisualStudio 2012,一个受信任的第三方告诉我,我必须将 /MT 编译标志添加到一个 C# 项目中,这样我就可以使用一个不一定安装在目标系统上的库。

我没有找到在 VS 中设置此标志的位置/方式。

【问题讨论】:

  • 应该提到有人编辑了我的帖子并将标签visual-studio C# 替换为visual-c++。然而,如果他真的确定 C# 和 C++ 的处理方式没有不同,他必须能够回答这个问题!
  • /MD, /MT, /LD (Use Run-Time Library) Visual Studio 2012 /MT 找到了这个。它是一个 C++ 编译器标志,与 C# 无关。要么你不应该相信他们,要么他们说错了,要么你听错了。
  • 我不得不承认我的问题太宽泛而且完全错误。我不能对我的问题投反对票,但我只是投了赞成票。可以在stackoverflow.com/questions/24888239/… 找到更好的(至少我希望如此)问题

标签: c# visual-studio-2012 compiler-options


【解决方案1】:

这是一个仅适用于 C 或 C++ 项目的设置。它选择将使用的 C 运行时库的类型。有两种基本风格,/MT 与 /MD,对于 Debug 和 Release 版本乘以 2,/MTd 和 /MDd。使用 /MT,运行时库将链接到 EXE 程序本身。使用 /MD,运行时库位于一个 DLL 中,可以由进程中的所有模块共享。当您将程序划分为多个模块(例如一个 EXE 和一个或多个 DLL)时,/MD 非常重要。

只有当供应商向您提供 静态链接库,即 .lib 文件时,供应商才会告诉您使用 /MT。并且只给了你一种风格,一般来说,这是一种非常有问题的做法,你不应该忍受,因为它为你提供了更少的选择来构建使用该库的程序。未说明但非常重要的是,他还需要告诉您使用哪个版本的 Visual Studio。

他给你的 .lib 文件根本不能在 C# 中使用。您必须将其链接到使用该库的 C 或 C++ 代码。要与 C# 互操作,您通常希望使用 C++/CLI 编写包装类,以便您可以访问库函数。但是你不能这样做,C++/CLI 只支持使用 /MD 构建。剩下的就是创建一个用 .def 文件导出函数的 DLL。您必须在 C# 代码中使用 pinvoke 来调用它们。

显然存在相当严重的通信故障。您需要跟进并与供应商交谈以解决此问题。积极地追求这一点,在未来很多年里,卡在一个不稳定的库中可能是一个巨大的问题,随着工具的发展,情况会越来越糟。

【讨论】:

    【解决方案2】:

    不确定 VS 2012 但在 2010 年可以按如下方式完成:

    右键单击您的项目

    -> 选择属性

    -> 选择配置属性

    -> 选择 C/C++

    -> 代码生成

    -> 在运行时库中选择多线程/MT 选项

    -> 清理并构建您的项目

    【讨论】:

    • 2012年没找到C/C++
    • 应该提到有人编辑了我的帖子并将标签visual-studio C# 替换为visual-c++。然而,如果他真的确定 C# 和 C++ 的处理方式没有不同,他必须能够回答这个问题!
    • 您在配置属性下看到了吗?它存在于 2010 和更低版本中。也应该在 2012 年的某个地方。
    • 好吧,是的,它在 C# 中与 Visual c++ 不同。
    【解决方案3】:

    C# 没有,就这么简单。这是一个(本机)C++ 选项,它选择要使用的运行时 C++ 库。在/MT的情况下,会静态链接多线程的MSVCRT。

    C# 使用 .NET。它不使用 MSVC++ 运行时库。

    你为什么要这样做?第三方家伙有没有说明这样做的目的?您是否正在尝试解决某些问题?听起来您正试图让 C# 应用程序在没有 .NET 的系统上运行 - 这不会发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2022-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2015-05-25
      相关资源
      最近更新 更多