首页 > 解决方案 > 防止链接静态库共享共享库

问题描述

我有一个链接到静态库的应用程序,并且都链接到共享库。具体来说,应用程序是一个gtest,共享库是一个使用glog的类。

当我运行测试时,glog 会终止应用程序并打印“你调用了 InitGoogleLogging() 两次!” 因为我做了......但它应该在库的两个不同副本上,有两个不同的日志文件。

这是一个链接选项,将共享库放在一起还是分开?

标签: c++linkershared-libraries

解决方案


回答你的问题:有点,但不是真的。这是可能的,但它很复杂,并且与动态库的运行方式背道而驰。

就解决您的问题而言:

google::InitGoogleLogging()main()意味着从应用程序的顶部调用。从一个类中进行调用,大概是它的构造函数,会带来很多麻烦。

将该调用移至main(), 或记录库要求其用户这样做的事实将删除重复的调用并且通常是更清洁的。

在紧要关头,您可以使用它IsGoogleLoggingInitialized()来摆脱困境,但我个人会尽可能避免依赖它,尤其是在库代码中。


推荐阅读