【发布时间】:2016-11-01 08:48:43
【问题描述】:
我们的产品由许多单独的 C++ 项目组成 - 直到最近它们都是 DLL 项目(可执行文件除外)。
其中一些项目从未真正改变过,我们认为可以通过从我们的日常解决方案中删除这些项目来减少开发人员产生的一些开销。然后将它们更改为构建为静态库,我们可以为开发人员提供要链接的 .lib(以及 PDB 等)。
不过,在此过程中,我们破坏了我们的记录器——它现在存在于这些静态库之一中。它被声明为全局的,我们现在创建了许多实例,而不是之前的单个实例(当它驻留在 DLL 项目中时)。拥有许多实例的主要问题是可执行项目通常设置文件名 - 因此文件名仅设置为与可执行项目关联的实例,而不是记录器的所有其他实例(即不反映记录其他项目在日志文件中)。
我理解为什么会发生这种情况,但我有兴趣从这里获得最佳前进方向的意见。
我相信,最简单的方法是将特定项目恢复为 DLL 项目。但是,我不希望这样做,因为该项目还包含其他内容。
我们可以将记录器移动到一个新的 DLL 项目中——这将是相当简单的,但我不禁觉得有一个“更好”的解决方案(我想总会有:P)。
在代码方面,在我们更改之前,记录器在 cpp 中声明如下:
static FileLogger m_fileLogger;
标头(包含在所有其他项目的 PCH 中)有一个宏,它使用全局函数与 m_fileLogger 进行交互。
我不知道为什么它被声明为静态。
我已经尝试在标题中externing它,但这并没有改变行为(正如预期的那样,考虑到在记录器项目中静态链接的 DLL 项目的设置)。
【问题讨论】:
-
您可能还可以从那些永不改变的项目中构建 dll 并将其分配(注意所有开发人员都使用相同的 CRT 版本)
标签: c++ logging dll static-libraries