c++ -/MT 版本的二进制文件在 Visual Studio 2008 中崩溃 - 如何调试

标签 c++ visual-studio-2008

我使用 visual studio 2008 构建了我的 C++ DLL 的/mt(运行时库:多线程)和/md(运行时库:多线程 dll)版本。

链接到/md 构建的应用程序运行良好, 但是链接到/mt build 的应用程序崩溃了。

有趣的是,链接到/mt 构建的静态版本的应用程序工作正常。

使用/mt 构建 DLL 并将其用于同样使用/mt 构建的应用程序是否有意义?

我如何追踪这种崩溃的原因?

问候,

保罗

最佳答案

这取决于您的 API。如果您使用运行时库的非 DLL 版本构建可执行文件,则每个 DLL 和 EXE 都会获得运行时库静态数据的自己的拷贝。最明显的影响是您不能从一个模块(DLL 或 EXE)动态分配某些东西并期望在另一个模块中安全地释放它。还会有其他不太常见的问题,例如,如果您在一个模块中 srand,不要指望它会影响整个应用程序对 rand 的调用。

在链接到其他用户 DLL 的可执行文件中,根据运行时库的 DLL 版本编译它们通常是最安全的。如果您使用静态库构建静态链接的可执行文件,您可能希望使用运行时库的静态版本,这可能是为了便于打包和分发,但考虑到潜在问题,我认为混合配置没有太大好处。

关于c++ -/MT 版本的二进制文件在 Visual Studio 2008 中崩溃 - 如何调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070106/

相关文章:

c++ - 如果同时运行 GPU 密集光流算法,为什么会得到损坏的结果?

c++ - 为 icu::UnicodeString 选择编码

c++ - 实现 atomic<T>::store

c++ - 单击按钮时如何更改光标

asp.net - 防止在 Visual Studio 2008 ASP.NET Web 窗体中复制粘贴时自动生成 ID

c++ - 矩阵堆栈、glLoadMatrix 和 glMultMatrix 与场景图和相机一起使用?

c++ - 使用tornado的分布式游戏服务器

c++ - 如何找到似乎只出现在发布版本中的罕见错误?

visual-studio-2008 - Visual Studio 2008\Backup Files 文件夹在打开每个新 VS 实例时创建

visual-studio-2008 - 从 Visual Studio 截图 windows mobile