将/ MT编译标志添加到项目中

时间:2014-07-22 10:24:33

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

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

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

3 个答案:

答案 0 :(得分:3)

这是一个仅适用于C或C ++项目的设置。它选择将使用的C运行时库的类型。有两种基本风格,/ MT vs / MD,调试和发布版本乘以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来调用它们。

显然,存在相当严重的通信故障。您需要跟进并与供应商交谈以使其理顺。积极地追求这一点,陷入困境的图书馆可能会成为未来许多年的巨大皮塔,随着工具的发展而越来越糟糕。

答案 1 :(得分:1)

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

右键单击您的项目

- >选择属性

- >选择配置属性

- >选择C / C ++

- >代码生成

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

- >清洁&建立你的项目

答案 2 :(得分:1)

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

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

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