问题标签 [microsoft-runtime-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
513 浏览

visual-c++ - 损坏的 C 运行时库?

我正在使用 Visual Studio Professional 2012(带有更新 2),并且由于我有一个需要使用 VC++ 2010 工具集构建的项目,因此我还安装了 Visual C++ 2010 Express(带有 SP1)。

我也将较新的 2012 IDE 用于较旧的项目。因此,对于这些项目,我将 Platform Toolset 设置为 v100。当我还将运行时库设置为 /MT 或 /MTd 时,我收到以下错误:

libcpmt.lib或,libcpmtd.lib取决于配置。

这里有什么问题?

安装历史:

  1. VS2012 专业版
  2. 视窗 7 SDK
  3. 卸载 VS2012 和 Windows SDK
  4. VC++ 2010 速成版
  5. VS2012 专业版
0 投票
1 回答
1126 浏览

gcc - 如何更改 MinGW 的规范文件以链接 MSVCR100.dll 和 MSVCP100.dll?

我正在使用 Windows 7 和最新的 MinGW 版本(gcc v4.7.2)。

我的问题是,触发 MinGW 将“MSVCR100”和“MSVCP100”运行时 dll 用于简单的测试应用程序。

我的默认自定义规范文件如下所示:

%{mthreads:-lmingwthrd} -lmingw32 %{shared-libgcc:-lgcc_s} %{!shared-libgcc:-lgcc_eh} -lgcc -lmoldname -lmingwex -lmsvcr100 -lmsvcp100

(mingw 发行版没有在 lib 目录中提供任何“MSVCP100.a”,所以我刚刚在“MSVCP100.a”文件的“dumpbin”和“dlltool”的帮助下创建了。)

我现在的问题是,如果我编译我的简单测试应用程序(它使用 boost-date-time 和 boost-log),我会得到以下未定义的引用:

  • 对“gmtime”的未定义引用
  • 对“本地时间”的未定义引用

但这不应该是不可能的,因为如果我使用 Visual Studio 2010 编译我的测试应用程序并在之后使用依赖遍历器分析二进制文件,我看到,引用了 dll 的“MSVCR100”和“MSVCP100”。

为什么我需要这个?我发现,我的测试应用程序在 Windows XP 上崩溃,但在 Win7 系统上没有崩溃,因为“msvcrt.dll”(v7.0.2600.5512)中的“setlocale”函数不是线程安全的(请在此处查看我和 boost.log 维护者之间关于此问题的对话:
Boost-Log)。所以我很好奇,如果我的测试应用程序也会崩溃,以防我用 Visual Studio 2010 编译它并在 WinXP 上测试二进制文件。我发现,没有发生崩溃,因为 Vistual Studio 将我的测试应用程序与“MSVCR100.dll”(和 MSVCP100.dll)链接起来。

由于某些限制,无法将我的项目代码从 MinGW 迁移到 Visual Studio。因此,我尝试更改 mingw 的规范文件以链接到提到的 dll。

问题:如何触发 MinGW,不再链接到“msvcrt.dll”,而是链接到“msvcrt100.dll”?或更笼统地说:如何触发 MinGW 使用与 Visual Studio 相同的运行时 dll?

任何帮助表示赞赏。感谢到目前为止,

拉斐尔

0 投票
1 回答
525 浏览

c++ - 解决运行时库冲突的好方法是什么?

我有一个相当大的 c/c++ CGI 项目,它引用了几个外部库(OpenSSL、FastCGI、Boost 等)。我验证了每个库都是用 /MT 构建的,就像我们的主要可执行项目一样。但是,当包含某些标头(例如,FastCGI 标头)时,我会收到数百个链接器错误,如下所示:

错误 226 错误 LNK1169:找到一个或多个多重定义符号

错误 121 错误 LNK2005:“受保护:__thiscall std::basic_ios >::basic_ios >(void)”(??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ) 已定义在 libfcgi.lib(libfcgi.dll) libcpmt.lib(cout.obj)

错误 208 错误 LNK2005:“受保护:__thiscall std::basic_ios >::basic_ios >(void)”(??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ) 已定义在 libfcgi.lib(libfcgi.dll) * CIL 库 CIL 模块 *)

我再次查看了libfcgi并验证了/MT并重新编译无济于事。我不知所措......这些图书馆冲突来自哪里?解决此类链接器错误的好方法是什么?(视觉工作室 2012)

0 投票
1 回答
507 浏览

c++ - 删除指针导致内存泄漏?

我正在使用运行时库 CRT 来检测内存泄漏。这是我在析构函数中发现的:

nDifference > 0,所以有内存泄漏,但没有说在哪里。

以下是 ptr 的声明和定义方式:

有什么建议么?

0 投票
0 回答
135 浏览

c# - 当 DLL 具有跨平台依赖关系时,如何让 C# 应用程序与 C++ DLL 通信?

我正在尝试构建一个 C# 小部件以与 C++ 服务架构一起运行。我正在利用现有的 C++ 接口服务来发布/订阅数据,并将其连接到 C# 可视化的回调。

所以我有一个 C# 项目和 C++ 数据接口项目的解决方案。C++ 接口项目使用 /clr、/MDd 和 /EHa 编译,但它依赖于使用 /EHsc 和 MTd 编译的许多库。当这些标志不匹配时,链接器不喜欢它。

如果我将数据接口更改为使用 /MTd 和 /EHsc 之类的依赖项,它会告诉我这与 /clr 不一致。我假设我必须让 C++ 数据接口使用 /clr 进行编译,这样它才能与 C# 可视化对话,对吧?但是我不拥有 C++ 项目的依赖库,所以我无法更改它们的编译方式。

所以我的问题是,当 DLL 具有使用 /MTd 和 EHsc 选项编译的依赖项时,您能否让 C# 应用程序与 C++ DLL 通信?

0 投票
2 回答
551 浏览

c - 从技术 POV 来看,MinGW 做了什么让 gcc 在 Windows 上成为可能?

几个问题:

  1. 理解 MinGW 本质上是获取 gcc 源并将其编译为 Windows 的可执行文件(即 gcc.exe)是否正确?

  2. MinGW wiki 说“另一方面,MinGW 提供由 Win32 API 提供的功能。”。这让我很困惑。默认情况下,Windows 安装是否已经提供了暴露 Win32 API 的 Win32 API 标头,这会使 MinGW 再次提供它变得多余?MinGW 提供的标头是否与 Windows 安装随附的标头不同?

  3. 当我有一个由 MinGW gcc 编译的目标文件时,我可以将它链接到 Windows 上的 C 运行时库吗?我认为不是因为 MinGW gcc 生成的目标文件可能与 Windows 上的 C 运行时库不兼容(比如使用相同的调用约定)。

0 投票
2 回答
350 浏览

c++ - 使用 /MT antivirus 编译的程序将其捕获为病毒

当我使用 VS C++ 2012 使用发布模式构建它时,我在 C++ 中创建了一个程序

运行时库:“多线程(/MT)

然后它被avast杀毒软件捕获为病毒。但是,如果我将运行时库更改为“多线程 DLL(/MD)”,那么 avast 就不会将其捕获为病毒。

这是代码

0 投票
1 回答
1604 浏览

c++ - 您可以使用旧的运行时库构建 Visual c++ 2013 吗?

由于新的运行时库不是在每台计算机上,它们需要下载可再发行组件,而且我知道我可以使用某种安装程序来做到这一点,但这很麻烦。

那么,有没有一种方法可以让我使用每台计算机上的旧运行时库来构建我的项目?

或者,如果我下载旧版本的 Visual Studio 并在其中构建项目以创建版本,那会正常工作吗?如果这是可能的,这是最好的方法吗?

注意:静态链接库是不可能的。

0 投票
1 回答
662 浏览

opencv - 如何在 Visual Studio 2013 中构建 opencv 和 boost?/MTd?/MDd?

我在 Windows 7 中将 boost 库和 openCV 与 Visual Studio 2013 一起使用。

当我构建它们时,有很多这样的错误。

因此,我搜索此错误,并将项目属性的运行时库从/MDd 更改/MTd

之后,这些错误消失了。但是,还有其他类似的错误。

我以前建立过这样的boost库。

我正确构建运行时链接静态(/MTd)。我不知道为什么我不能用 /MTd 选项编译 boost。我能怎么做?

0 投票
1 回答
219 浏览

windows - win32diskimage 无法启动

我从http://sourceforge.net/projects/win32diskimager/files/latest/download下载了该工具, 但安装后无法启动它,我在 windows 7 64bit 下工作,它给我带来了这个窗口: 错误信息