我在多个项目中使用了boost log,并且发现了我应该使用/构建lib的方式的限制,这取决于我开发的静态或共享的软件组件类型ode请参阅here
该库有一个单独编译的部分,应按照入门指南中的描述进行构建。但有一点需要注意。如果您的应用程序包含多个使用Boost.Log的模块(例如,exe和一个或几个dll),则必须将库构建为共享对象。如果您有一个可执行文件或一个与Boost.Log一起使用的模块,您可以将该库构建为静态库。
有这种限制的解释/原因吗?
答案 0 :(得分:1)
这是因为此库包含具有内部链接和静态存储持续时间的对象。将这些对象放入共享库有助于确保在运行时没有这些对象的重复。
请注意,带有外部链接的静态存储持续时间对象不会受此影响:如果链接时存在重复的定义 - 链接器在运行时抱怨 - 只有第一个可用的定义是使用