C++ 阻止链接的静态库共享共享库

C++ 阻止链接的静态库共享共享库,c++,linker,shared-libraries,C++,Linker,Shared Libraries,我有一个应用程序链接到一个静态库,并且两者都链接到一个共享库。具体来说,应用程序是一个gtest,而共享库是一个使用glog的类 当我运行测试时,glog杀死应用程序并打印“您调用了InitGoogleLogging()两次!”因为我这样做了……但它应该在库的两个不同副本上,使用两个不同的日志文件 这是一个链接选项,共享库在一起还是分开?回答您的问题:有点,但不是真的。这是可能的,但它是复杂的,与动态库的运行方式背道而驰 就解决您的问题而言: google::InitGoogleLogging(

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

当我运行测试时,glog杀死应用程序并打印“您调用了InitGoogleLogging()两次!”因为我这样做了……但它应该在库的两个不同副本上,使用两个不同的日志文件


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

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

就解决您的问题而言:

google::InitGoogleLogging()
表示从应用程序的
main()
顶部调用。从一个类(可能是它的构造函数)中进行调用会带来很多麻烦

将该调用移动到
main()
,或记录库要求其用户这样做的事实,将删除重复的调用,并且通常会更干净

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