c++ - 在 Linux 上静态链接库

标签 c++ linux gcc linker sqlite

我正在尝试为 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/

相关文章:

C++ : Prevent a Class from Initialization

c++ - 不可复制的成员是否可以用作使对象不可复制的替代方法?

linux - linux下打开的文件是什么?

linux - 在Linux PowerShell和Linux bash中使用 'rm -rf'

ubuntu - Ubuntu 13.10 哪个开发包有ndir.h?

c++ - fpermissive 类构造函数堆栈类 : fpermissive on constructor

c++ - "return new node"内存泄漏,我找不到修复它的方法

c++ - mmap 文件,其中包含一个不受该文件支持的额外页面

gcc - mingw 交叉编译错误 - 未定义对 `__mingw_get_msvcrt_handle' 的引用

c++ - 测试字符串以查看是否存在数字并将值分配给变量同时跳过所有非数字值?