Firefox 3.6.x用のXPCOMコンポーネントを作成しようとしています。静的にコンパイルされたlibsqlite3バージョン3.7.4を使用します(プログラム独立コード生成 - -fPICコンパイラオプション付き)。私が直面している問題は、Firefoxがコンポーネントをロードして実行を開始すると、はマクロSQLITE_LIBVERSION_NUMBER
が3007004に定義されている間に3007001を返します。私は正しい静的なsqlite3ライブラリとリンクしていると確信しています...しかし、これをもう一度確認するにはどうしたらいいですか? ldd
生成された共有オブジェクトの出力では依存関係としてlibsqlite3.soがリストされません(libxul.soはXPCOMコンポーネントの作成に使用されますが、libsqlite3.soが使用されます)。すべてのsqlite3関数呼び出しは、どのようにしてSQLiteの別のバージョンに解決されますか?Linux上でライブラリを静的にリンクする
PS:それはライブラリは-fPICとFirefoxでコンパイルされているので、後でdlopen
を使用してそれらをロードしますか?
は、はい...静的ライブラリに対してリンクインクルージョンため非常に多くの事柄は、それが(グラムから++)これらのリンカのフラグを使用して解決される: '-Wl、 - 起動グループ<すべてのアーカイブファイルは、ここに記載されている> -Wl、 - -end-group'を実行します。これにより、リンカはこれらのアーカイブ内のシンボルを再帰的にチェックします。 – themoondothshine