gpt4 book ai didi

c++ - 单个进程上的多个 SQLite 库

转载 作者:行者123 更新时间:2023-12-02 00:40:49 26 4
gpt4 key购买 nike

操作系统:基于arm的Linux。

编程语言:C、C++

编译器:arm gcc

我们构建了一个共享库(我们称之为 libFoo.so),它依赖于某个 SQLite 版本。 SQLite 库是静态编译的并链接到 libFoo.so。它们都是使用隐藏可见性 (-fvisibility=hidden) 进行编译的,并且 libFoo.so 仅导出其 API 符号,因此使用“nm -D libFoo.so”时 SQLite 符号不可见。这是为了避免符号冲突。该共享库仅对一组特定的数据库文件执行读取操作。这些数据库预计只能通过 libFoo.so 打开。

我们的合作伙伴使用 libFoo.so 构建应用程序,并链接到平台上的 Qt 服务框架。 Qt服务框架依赖于平台上的SQLite共享库,该库的版本与我的不同。这意味着该进程会加载 SQLite 库的两个拷贝,但来自 libFoo.so 的拷贝被隐藏。

问题:

  1. 我最终遇到 How to corrupt - Multiple copies of SQLite linked into the same application 中提到的数据库损坏问题的可能性有多大?我很好奇可能会出错的情况。

  2. SQLite 保留打开的 SQLite 数据库文件的全局列表。 SQLite共享库是否有机会从SQLite静态库访问打开的数据库文件的全局列表?

在上面的 SQLite 页面中,提到了一个解决方案,仅链接 SQLite 库的一个拷贝,这意味着更改我无法访问的平台的构建过程。

我用谷歌搜索并发现了一个有趣的讨论:

  • The multiple SQLite problem ,有一条评论指出也许可以像我一样使用 SQLite 作为静态库并隐藏 SQLite 符号。

谢谢!

最佳答案

当我将代码编译到苹果ios时,我遇到了这个问题。另一个使用另一个版本的 sqlite3 的 sdk 库。

我只是将我的 sqlite3 源代码和 sqlite3 源代码的调用者中的字符串 sqlite3 重命名为另一个随机字符串(例如 hrbw)。

然后问题就解决了。

关于c++ - 单个进程上的多个 SQLite 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com