我正在尝试为 Firefox 3.6.* 制作 XPCOM 组件。它使用静态编译的 libsqlite3 版本 3.7.4(具有程序独立代码生成 -- -fPIC 编译器选项)。我面临的问题是,一旦 Firefox 加载组件并开始执行,sqlite3_libversion_number()
返回 3007001,而宏 SQLITE_LIBVERSION_NUMBER
定义为 3007004。我很确定我正在链接正确的静态 sqlite3 库...但是我如何仔细检查这一点?生成的共享对象的 ldd 输出未将 libsqlite3.so 列为依赖项(尽管用于创建 XPCOM 组件的 libxul.so 使用 libsqlite3.so)。所有 sqlite3 函数调用如何解析为不同版本的 SQLite?
PS:是否是因为这些库是使用 -fPIC 编译的,而 Firefox 后来使用 dlopen
加载它们?
最佳答案
我正在查看包含顺序。我也花了一整天或类似的时间想知道为什么 fseek() 失败,不是直接在 Linux 上而是在 Bada 上,并使用 Eclipse IDE。问题是,具有相同签名的相同函数是由 Bada SDK 的某些“beta”阶段 .a 文件导出的。我首先不小心导入了错误的.a 文件。
关于c++ - 在 Linux 上静态链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4546436/