2013-02-28 27 views
3

这是我昨天发布的this question的一种后续行为。我的问题是关于哪些运行时C++库链接。我使用Qt作为框架,为我的IDE使用QtCreator。根据digia文档here,Qt在使用/MT标志(使您的应用程序针对静态运行时库运行)构建时已知存在内存问题。不过,我在这个应用程序中也使用了第三方驱动程序,该应用程序中的文档特别声明,除非您链接到静态运行时库,否则它不会生成。果然,它编译与/MT国旗罚款,但给我约40个链接器错误,当我删除该设置。 (到目前为止,我只是从驱动程序的静态库中包含一个头文件)/MT和/ MD都需要时该怎么办?

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

+0

是的,我花了几分钟思考,想出了什么都没有。如果QT维护者会修正他们的错误,那将会很好。也许你可以找到一些内存管理是一个问题的具体实例,看看你是否可以避免它们?我不知道QT,这是不安全的,但如果你构建QT是一组动态库,它可以工作......除非你做一些事情,比如将你的静态版本的'malloc'分配的指针传递给QT ,它转过来并用错误的'free'释放它。这加上一百万其他可能的问题.... – 2013-02-28 05:32:43

回答

1

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

在这种情况下,请使用/MD作为Qt和您自己的代码。用非依赖于CRT的API将驱动程序封装在它自己的DLL中,并将该DLL与/MT链接起来。使用COM可能是一个选项。这当然不是CRT依赖的,但它可能是矫枉过正的。

相关问题