当/ MT和/ MD都需要时该怎么办?

时间:2013-02-28 03:41:28

标签: c++ qt build linker qt-creator

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

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

1 个答案:

答案 0 :(得分:1)

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

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