gpt4 book ai didi

visual-c++ - Is/nodefaultlib :msvcr100 the proper approach to handling msvcr100. dll vs msvcr100d.dll defaultlib 问题

转载 作者:行者123 更新时间:2023-12-02 00:04:31 26 4
gpt4 key购买 nike

对于构建在 Linux 和 Windows 上的跨平台软件项目,我们有不同的方法来处理第三方库。在 Linux 上,我们构建并链接到与 CentOS/RHEL 发行版一起分发的版本,这意味着我们链接到发布版本,而在 Windows 上,我们维护我们自己的第三方库“包”,在 Windows 上,我们为每个库构建两个版本 -链接 msvcr100 和 msvcp100 的发布版本和链接 msvcr100d 和 msvcp100d 的调试版本。

我的问题很简单,是否有必要在 Windows 上构建第三方依赖项的调试版本,或者我们可以在构建我们自己的软件的调试版本时简单地使用/nodefaultlib:msvcr100。

后续问题:我在哪里可以了解这方面的良好做法。我已经阅读了有关 msvc 运行时的 MSDN 页面,但那里的建议很少。

编辑:

让我更简洁地重新表述这个问题。对于 VS2010,在链接使用/MD 编译的库时,使用/nodefaultlib:msvcr100 将可执行版本与/MDd 链接会出现什么问题。

我这样做的动机是避免必须构建我使用的第三方库的发布和调试版本。此外,我希望我的调试版本运行得更快。

来自/MD、/MT、/LD(使用运行时库)的文档:

MD: Causes your application to use the multithread- and DLL-specific version of the run-time library. Defines _MT and _DLL and causes the compiler to place the library name MSVCRT.lib into the .obj file.

Applications compiled with this option are statically linked to MSVCRT.lib. This library provides a layer of code that allows the linker to resolve external references. The actual working code is contained in MSVCR100.DLL, which must be available at run time to applications linked with MSVCRT.lib

/MDd: Defines _DEBUG, _MT, and _DLL and causes your application to use the debug multithread- and DLL-specific version of the run-time library. It also causes the compiler to place the library name MSVCRTD.lib into the .obj file.

因此,除了定义了 _DEBUG 之外,没有任何文档说明对生成的代码所做的任何差异。

最佳答案

您只能使用 CRT 的调试版本来调试您的应用。它包含大量断言,可帮助您发现代码中的错误。您从不交付项目的调试版本,始终是发布版本。你也不能,许可证禁止运送 msvcr100d.dll。因此,自动正确构建您的项目可以避免对 CRT 调试版本的依赖。

/nodefaultlib 链接器选项旨在允许将您的程序与自定义 CRT 实现链接。很少见,但一些程序员非常关心构建小程序,而标准 CRT 并不小。

有些程序员使用/nodefaultlib 解决链接问题。当他们将使用调试配置设置构建的代码与使用发布配置设置构建的代码链接时引发。或具有不兼容的 CRT 选择的链接代码,/MD 与/MT。这可以工作,但不能保证,但当然只能解决地板垫下的真正问题。

所以不,这不是正确的选择,解决核心问题应该是你的目标。确保您所有的 .obj 和 .lib 文件都是使用相同的编译器选项构建的,这样您就不会遇到这个问题。如果这意味着你必须纠缠库所有者以获得正确的构建,那么首先纠缠,只有当你发现你不想再依赖那个 .lib 但还没有是时候寻找替代方案了。

关于visual-c++ - Is/nodefaultlib :msvcr100 the proper approach to handling msvcr100. dll vs msvcr100d.dll defaultlib 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19212326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com