可能的共享库冲突导致SQLite数据库损坏

时间:2011-01-13 14:30:54

标签: linux shared-libraries

我们的应用程序是FF& amp;的浏览器插件铬。该应用程序使用SQLite来存储数据。 SQLite文件在FF / Linux或FF / Mac上损坏。

我们的假设文件etting corrupted描述如下:

1)FF正在加载SQLite 3.7.1作为共享库

2)我们的插件(它是一个共享库)是静态链接的 SQLite 3.7.4。我们确保我们的插件只导出一个 符号NSGetModule(FF需要加载插件)。所有其他 使用--version-script编译器选项

来隐藏符号 3)由于可能的符号冲突,正在发生 bad 跨多个版本的SQLite库

补充意见:

1)Chrome运行插件时,Chrome中不会出现同样的问题 单独的过程
2)我们在Windows上没有遇到这个问题。仅适用于Linux或Mac
3)我们必须使用SQLite 3.7.4,因为我们正在使用最新版本的功能

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您对原因的猜测 - 意外的符号冲突 - 很可能是正确的。

如果您已正确隐藏所有内容(正如您所说),则从

输出
nm -D your-plugin.so
Linux上的

应该只列出定义的NSGetModule,根本不会列出SQLite个符号(我希望你仍会看到来自libc的很多未解析的符号,等等否则你将你的插件链接起来。

您可以使用LD_DEBUG=symbols,bindings在Linux上运行Firefox。这将产生许多MB输出,但您应该看到很少有对您的插件的引用,没有任何SQLite符号的引用。

实际上观察到的是什么?