c++ - 当/MT 和/MD 都需要时怎么办?

标签 c++ qt build linker qt-creator

这是对 this question 的一种跟进我昨天发了。我的问题是要链接到哪些运行时 C++ 库。我使用 Qt 作为我的 IDE 的框架和 QtCreator。根据 digia 文档 here , 众所周知,Qt 在使用 /MT 标志构建时会出现内存问题(这会使您的应用程序针对静态运行时库运行)。但是,我还在这个应用程序中使用了第 3 方驱动程序,并且该应用程序上的文档明确指出,除非您链接到静态运行时库,否则它不会构建。果然,它使用 /MT 标志编译得很好,但是当我删除该设置时,它会给我大约 40 个链接器错误。 (到目前为止,我只包括驱动程序静态库中的一个头文件)

所以我的问题是:在这里正确的做法是什么?有没有办法强制驱动程序期待动态运行时库?或者我应该忍受 Qt 的内存管理问题吗?或者有没有办法让 Qt 链接到动态驱动程序和驱动程序(以及它需要的 Boost 部分)链接到静态驱动程序? (请记住,我是在 QtCreator 中执行此操作,而不是在工作室中执行此操作)

最佳答案

/MT/MD 都是链接器选项。如果您要构建多个模块,则可以有多个选项。

在这种情况下,对 Qt 和您自己的代码使用 /MD。使用不依赖于 CRT 的 API 将驱动程序包装在它自己的 DLL 中,并将该 DLL 与 /MT 链接。使用 COM 可能是一种选择。这当然不依赖于 CRT,但它可能有点矫枉过正。

关于c++ - 当/MT 和/MD 都需要时怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127026/

相关文章:

javascript - 在 GitHub Pages 构建期间缩小 JavaScript?

npm - 每次保存时运行 eslint 命令

android - 有没有办法在 unity 5.6 中为 android API 级别 15 构建 apk?

C++ : get week number from yyyyMMdd

c++ - 带有 SDL2 的 Visual Studio 2012 中出现“函数中引用的未解析的外部符号 _SDL_main”错误

c++ - 如何始终在 QDoubleSpinbox 中显示符号(+ 或 -)?

c++ - 如何将 kinect 图像帧传递给 Qt 标签?

c++ - Qt 电子邮件输入小部件

c++ - 在声明为返回unique_ptr <Base>的函数中返回unique_ptr <Derived>

c++ - 在C++中获取调用者的地址