2010-12-28 19 views
0

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を使用してそれらをロードしますか?

答えて

0

私は含める順序を見ています。私は一日中、またはLinuxで直接ではなく、Badaで、そしてEclipse IDEを使用して、fseek()が失敗した理由を悩ましています。この捕獲は、Bada SDKの "beta" stage .aファイルによって、同じ署名を持つ同じ関数がエクスポートされたということでした。そして、誤って.aファイルを最初にインポートしました。

+0

は、はい...静的ライブラリに対してリンクインクルージョンため非常に多くの事柄は、それが(グラムから++)これらのリンカのフラグを使用して解決される: '-Wl、 - 起動グループ<すべてのアーカイブファイルは、ここに記載されている> -Wl、 - -end-group'を実行します。これにより、リンカはこれらのアーカイブ内のシンボルを再帰的にチェックします。 – themoondothshine

0

は、Linuxでは、再帰的なシンボル解決を実行する - すなわちlibxul次に、Firefoxが間接的libxulからのlibsqlite3を含むことによってシンボルを解決するのlibsqlite3を使用している場合。

これはAIX機には当てはまらない - (依存ライブラリに基づいて)再帰的なシンボル解決が行われません。

これは実際の問題ではないかもしれませんが、チェックする価値があります。

また、sqlite3のは(私があるとしている)下位互換性がある場合、その後、あなたはsqlite3のの最新バージョンにlibxulや他のライブラリをリンクすることができます確認してください。

+0

はい、SQLiteは非常に下位互換性がありますが、ソースからlibxulを再構築するのは今の選択肢ではありません。 – themoondothshine

+0

libxulがsqliteに動的にリンクされている場合、libxulをコンパイルする必要はありません。 LD_LIB_PATHに直接入れることができます。なぜそれをコンパイルする必要があるのか​​分かりません。 –

関連する問題