我使用visual studio 2008构建/ mt(运行时库:多线程)和/ md(运行时库:多线程-dll)版本的C ++ DLL。
链接到/ md构建的应用程序运行正常, 但链接到/ mt构建的应用程序崩溃。
有趣的是,链接到/ mt构建的静态版本的应用程序可以正常工作。
使用/ mt构建DLL并将其与同时使用/ mt构建的应用程序一起使用是否有意义?
如何追踪此类崩溃的原因?
此致
保
答案 0 :(得分:1)
这取决于您的API。如果使用非DLL版本的运行时库构建可执行文件,则每个DLL和EXE都会获得它自己的运行时库静态数据副本。最明显的效果是您无法从一个模块(DLL或EXE)动态分配内容,并期望在另一个模块中安全地释放它。还有其他不太常见的问题,例如,如果您在一个模块中srand
,则不要指望它会影响整个应用程序对rand
的调用。
在可执行文件中通常最安全的是链接其他用户DLL以针对运行时库的DLL版本编译它们。如果使用静态库构建静态链接的可执行文件,可能需要使用运行时库的静态版本,这可能是为了便于打包和分发,但鉴于潜在的问题,我认为混合配置没有太大的好处。 / p>