当我需要构建一些第三方库以在不同版本的 MSVC 下的多个项目中使用时,我通常为每个MSVC 版本以及调试和发布配置构建它。这就是 boost 所做的,这就是我们在团队中的整个一生都在做的事情。
但是,我仍然不明白,为什么我不能用 like... 来构建这个库。我只需要函数原型和目标代码,对吗?由于我静态链接 CRT,我没有外部依赖项。但是,当我尝试将在 MSVC8 下的 Release 中构建的库与我在 MSVC10 下的 Debug 中的项目链接时,我遇到了这个令人讨厌的“已定义”链接器错误,我们都非常讨厌。
但为什么?我可以在 lib 中“封装”所有这些函数而不导出它们,以便我的项目只从 lib 中获取它需要的东西吗?为什么我可以拥有可以在每个项目中链接的 libpng 和 zlib 的预编译版本?是的,我猜它们不是使用 MSVC 构建的,但仍然使用 CRT 的相同功能。那么任何人都可以深入解释或分享对这个问题的一些开明解释的链接吗?