2011-01-13 22 views
0

我们的应用程序是Chrome浏览器插件FF &。该应用程序使用SQLite来存储数据。 SQLite文件在FF/Linux或FF/Mac上损坏。可能的共享库冲突导致损坏的SQLite数据库

为文件我们假设 ETTING损坏如下所述:

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

2)我们的插件(这是一个共享库)是静态地链接到 SQLite 3.7.4。我们确保我们的插件仅导出一个符号为NSGetModule的 (由FF要求加载插件)。

:所有其他 的符号使用--version脚本编译器选项

3)东西是因为可能的符号发生在多个版本的SQLite库的

补充意见冲突 隐藏1)同样的问题在Chrome中不会出现,因为Chrome在 单独的进程中运行插件
2)我们在Windows上不面临这个问题。只有在Linux或Mac
3)我们必须为我们使用的最新版本

任何想法的功能使用SQLite 3.7.4?

+0

我只能想到两件事情。 1)你的假设是错误的。 2)检查“nm -s”的输出,以确保不仅是您的插件正在导出的内容,还包括它在加载时从外部引用的内容,并确认SQLite符号全部解析。 – gravitron

回答

0

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

如果您已经正确隐藏的一切(你说你所做的那样),然后从

nm -D your-plugin.so 

Linux上的输出应该只列出NSGetModule定义,并且根本没有SQLite符号(我想你会仍然会看到很多来自libc的未解决符号,以及其他任何与您的插件链接的符号)。

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

难道你其实观察?