问题标签 [msvcrt]
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.
c++ - 如何强制 C++ 编译器使用特定的 CRT 版本?
我正在使用 VS2008 开发 COM dll,默认情况下使用 CRT 版本 9,但我使用的是与新 CRT 不兼容的 TSF(文本服务框架)。我认为解决方案是使用兼容的,那么如何指定 CRT 版本?
c++ - 我应该用 /MD 还是 /MT 编译?
在 Visual Studio 中,有编译标志 /MD 和 /MT 可让您选择所需的 C 运行时库。
我理解实现上的差异,但我仍然不确定使用哪一个。有什么优点/缺点?
我听说 /MD 的一个优点是,它允许某人更新运行时,(比如可能修补安全问题)并且我的应用程序将从这次更新中受益。尽管对我来说,这似乎是一个非功能:我不希望人们在不让我针对新版本进行测试的情况下更改我的运行时!
我很好奇的一些事情:
- 这将如何影响构建时间?(大概 /MT 有点慢?)
- 其他影响是什么?
- 大多数人使用哪一种?
windows - WaitForSingleObject 在文件句柄上?
当你调用WaitForSingleObject()
你用CreateFile()
or创建的句柄时会发生什么_get_osfhandle()
?
由于不值得解释的原因,我想WaitForSingleObject()
用来等待我创建的 HANDLE _get_osfhandle(fd)
,其中fd
来自定期调用_open()
. 这可能吗?
我已经在实践中尝试过,并且在某些机器上它按预期工作(句柄始终处于信号状态,因为您可以从中读取更多数据),并且在某些机器上WaitForSingleObject()
如果您允许它会无限期阻塞。
MSDN 页面WaitForSingleObject()
说,它处理的唯一受支持的事情是“更改通知、控制台输入、事件、内存资源通知、互斥体、进程、信号量、线程和可等待计时器”。
此外,如果我使用CreateFile()
而不是_get_osfhandle()
CRT 文件描述符会有所不同吗?
msvcrt - 我应该静态还是动态链接到 Visual Studio C 运行时?
我已经阅读了双方关于是否应该在 Visual Studio 项目中静态或动态链接到 C 运行时库的争论,但我仍然不完全确定该怎么想。
我的项目引入了一些第三方库(Python、HDF5、Trilinos 和 Microsoft MPI),每个库都必须使用与我的最终可执行文件相同的运行时库构建(否则它们无法链接在一起)。静态链接时,这些库中的每一个都将包含 C 运行时的副本。我读到这可能会导致问题,因为最终的可执行文件将包含运行时的多个副本,它们都不能相互交互。但是如果相同的符号被多次定义,链接器不会抱怨吗?
我想避免“DLL Hell”,但我担心在运行时的多个副本中静态链接可能产生的潜在错误。我读错了吗?
此外,我使用的是 Visual Studio 2005,并且我读到 Service Pack 1 运行时不向后兼容。这是否意味着没有 SP1 构建的应用程序将无法在具有 SP1 dll 的机器上运行,即使它们具有相同的名称(例如 msvcr80.dll)?
visual-studio - Is there a Windows equivalent of EDQUOT?
I'm porting some C++ code from UNIX to Windows which detects the occurrence of the EDQUOT error, which indicates that there was an unsuccessful attempt to exceed the current user's disk quota. Visual Studio's <errno.h> doesn't have an EDQUOT, although I know that Windows has disk quota functionality. Visual Studio's <errno.h> does have an ENOSPC, which might be how the CRT expresses what UNIX would express as EDQUOT. Can anybody confirm or deny this theory? And if this isn't the way to handle this, what is?
windows - Windows malloc 替换(例如 tcmalloc)和动态 crt 链接
使用多个 DLL 和 QT 的 C++ 程序应配备 malloc 替代品(如tcmalloc),以解决可验证为由 Windows malloc 引起的性能问题。使用 linux,没有问题,但是使用 windows,有几种方法,我发现它们都不吸引人:
1.将新的malloc放入lib并确保首先链接它(其他SO问题)
这有一个缺点,例如strdup 仍将使用旧的 malloc 并且 free 可能会使程序崩溃。
2. 使用 lib.exe (Chrome) 从静态 libcrt 库中删除 malloc
这已针对chrome/chromium进行了测试/使用(?),但缺点是它仅适用于静态链接 crt。如果一个系统库与 msvcrt 动态链接,则静态链接会出现问题,堆分配/释放中可能存在不匹配。如果我理解正确,tcmalloc 可以动态链接,这样所有自编译的 dll 都有一个公共堆(这很好)。
3.补丁crt-源码(firefox)
Firefox 的 jemalloc显然修补了 windows CRT 源代码并构建了一个新的 crt。这又出现了上面的静态/动态链接问题。
可以考虑使用它来生成动态 MSVCRT,但我认为这是不可能的,因为许可证禁止提供具有相同名称的修补 MSVCRT。
4.在运行时动态修补加载的CRT
一些商业内存分配器可以做到这一点。tcmalloc 也可以,但这看起来相当难看。它有一些问题,但它们已得到修复。目前,使用 tcmalloc 它不能在 64 位窗口下工作。
有更好的方法吗?任何意见?
.net - 哪个 CRT 版本与 .NET 3.5 捆绑在一起?
为了最小化部署包,我想知道 .NET redists 中已经包含的 CRT 版本。我已经收集的信息是:
.NET 2.0 -> CRT 8.0.50727.42
.NET 2.0 SP1 -> CRT 8.0.50727.762
但是,我找不到 .NET 3.5 的 CRT 版本。我大致记得我曾经遇到过一个博客页面列出所有版本。但是,我只是无法再次谷歌它......
编辑:所以它是这样的?
.NET 3.5 -> CRT 9.0.21022.8
.NET 3.5 SP1 -> CRT 9.0.30729.1
c++ - Windows Mobile 中的 _CrtDbgReportW 输出在哪里?
我正在使用 ASSERTE 宏来检查前置条件。根据它的定义,它使用 ASSERT_BASE,然后调用 _CrtDbgReportW 来打印消息。_CrtDbgReportW 输出到哪里?
我假设如果应用程序是从调试器启动的,它将进入调试器窗口。如果不在调试器下,消息会去哪里?
visual-studio - Visual C++ 运行时库链接器问题
观察这个接近的场景,即使它看起来和我之前的问题一样。我仍然没有得到答案。所以请不要报告为重复。
我有一个项目,它有 10 个依赖项。首先,我在主项目的 C/C++ 代码生成部分中使用 /MTD 选项进行编译,并且它的所有依赖项都已成功构建。
接下来,我将选项从 /MTD 更改为 /MDd,并且所有相关项目都已成功构建。但是对于主项目报如下错误:
我怎样才能解决这个问题?
visual-c++ - 如何解决 Visual Studio (LNK2005) 中的此链接错误?
我一直有以下形式的链接器错误:
libcmtd.dll msvmrtd.dll一些元素(例如: _mkdir )已经定义...
而且我不知道如何解决它们。
这是一个完整的错误信息:
private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义
MSVCRTD.lib(ti_inst.obj) : 错误 LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已在 LIBCMTD.lib 中定义(typinfo.obj)
你能帮我解决这个问题吗?