簡體   English   中英

在Linux上靜態鏈接庫

[英]Statically linking a library on Linux

我正在嘗試為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文件。

在Linux中,它將執行遞歸符號解析-即,如果libxul使用libsqlite3,則firefox將通過包含來自libxul的libsqlite3來間接解析符號。

在AIX機器中不是這種情況-不會進行遞歸符號解析(基於依賴庫)。

這可能不是實際問題,但值得檢查。

還要檢查sqlite3是否向后兼容(我想是),然后可以將libxul和其他庫鏈接到最新版本的sqlite3。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM