c++ - 防止链接静态库共享共享库
问题描述
我有一个链接到静态库的应用程序,并且都链接到共享库。具体来说,应用程序是一个gtest,共享库是一个使用glog的类。
当我运行测试时,glog 会终止应用程序并打印“你调用了 InitGoogleLogging() 两次!” 因为我做了......但它应该在库的两个不同副本上,有两个不同的日志文件。
这是一个链接选项,将共享库放在一起还是分开?
解决方案
回答你的问题:有点,但不是真的。这是可能的,但它很复杂,并且与动态库的运行方式背道而驰。
就解决您的问题而言:
google::InitGoogleLogging()
main()
意味着从应用程序的顶部调用。从一个类中进行调用,大概是它的构造函数,会带来很多麻烦。
将该调用移至main()
, 或记录库要求其用户这样做的事实将删除重复的调用并且通常是更清洁的。
在紧要关头,您可以使用它IsGoogleLoggingInitialized()
来摆脱困境,但我个人会尽可能避免依赖它,尤其是在库代码中。
推荐阅读
- python-2.7 - 循环键盘效果
- java - 可能由于模(10,9)+7 导致超出时间限制错误?
- vue.js - 未找到模块,无法解析组件,未指定 $TERM。将 Nuxt 应用程序部署到 Heroku
- c# - Genesys 工作台。编辑。获取信息
- typescript - 打字稿重新映射数组类型
- c++ - 与 Visual Studio 静态链接时如何链接 SFML
- mysql - JpaRepository 保存值始终返回 null
- windows - 如何使用 git bash 删除 ~$ 文件(在 Windows 上)
- ios - 如何在 Swift 中更改 UILabel 的文本属性?
- snowflake-cloud-data-platform - 使用 Like/Regex 如何匹配列前的多个 777 变体