我有 VisualStudio 2012,一个受信任的第三方告诉我,我必须将 /MT 编译标志添加到一个 C# 项目中,这样我就可以使用一个不一定安装在目标系统上的库。
我没有找到在哪里/如何在 VS 中设置这个标志。
我有 VisualStudio 2012,一个受信任的第三方告诉我,我必须将 /MT 编译标志添加到一个 C# 项目中,这样我就可以使用一个不一定安装在目标系统上的库。
我没有找到在哪里/如何在 VS 中设置这个标志。
这是一个仅适用于 C 或 C++ 项目的设置。它选择将使用的 C 运行时库的类型。有两种基本风格,/MT 与 /MD,对于 Debug 和 Release 版本,/MTd 和 /MDd 乘以 2。使用 /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 来调用它们。
显然存在相当严重的通信故障。您需要跟进并与供应商交谈以解决此问题。积极地追求这一点,在未来很多年里被一个不稳定的库卡住可能是一个巨大的皮塔,随着工具的发展越来越糟糕。
不确定 VS 2012 但在 2010 年可以按以下方式完成:
右键单击您的项目
-> 选择属性
-> 选择配置属性
-> 选择 C/C++
-> 代码生成
-> 在运行时库中选择多线程/MT 选项
-> 清理并构建您的项目
C# 没有,就这么简单。这是一个(本机)C++ 选项,它选择要使用的运行时 C++ 库。在 的情况下/MT
,它将静态链接多线程 MSVCRT。
C# 使用 .NET。它不使用 MSVC++ 运行时库。
你为什么要这样做呢?第三方家伙有没有说明这样做的目的?您是否正在尝试解决某些问题?听起来您正试图让 C# 应用程序在没有 .NET 的系统上运行——这不会发生。