我们的应用程序是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,因为我们正在使用最新版本的功能
有什么想法吗?
答案 0 :(得分:0)
您对原因的猜测 - 意外的符号冲突 - 很可能是正确的。
如果您已正确隐藏所有内容(正如您所说),则从
输出nm -D your-plugin.so
Linux上的应该只列出定义的NSGetModule
,根本不会列出SQLite
个符号(我希望你仍会看到来自libc
的很多未解析的符号,等等否则你将你的插件链接起来。
您可以使用LD_DEBUG=symbols,bindings
在Linux上运行Firefox。这将产生许多MB输出,但您应该看到很少有对您的插件的引用,没有任何SQLite
符号的引用。
你实际上观察到的是什么?