2017-11-21 20 views
1

expatライブラリに基づいてCヘッダとソースファイル内に記述されたXML解析ユーティリティがあります。 これは私のソースファイルを静的にリンクされた静的ライブラリにコンパイルしました。すべてのシンボルが解決された状態でライブラリを別のライブラリに静的にリンクする方法

私はアプリケーションとユーティリティライブラリとexpatの両方を静的にリンクしている場合に限り、結果として得られるxmlユーティリティライブラリの関数を自分のアプリケーションと共に使用することができます。私は、アプリケーション実行可能ファイルとexpatを静的に再度リンクする必要なしに、自分のユーティリティライブラリを静的にリンクするだけで、自分のアプリケーションを構築できるはずだと考えました。私のアプリケーションとユーティリティライブラリをリンクするだけでは、expatには未定義のシンボルエラーが発生します。

誰かが私に欠けているものを教えてもらえますか?私はgccコンパイラを使用しています。

おかげで....

答えて

1

「私は静的にそれにリンクされているexpatの静的ライブラリに私のソースファイルをコンパイルしています。」

私はあなたがしていないことを恐れています。静的ライブラリはリンカによって生成されません。リンケージは関係しないので、何もそれにリンクすることはできません。 スタティックライブラリは、オブジェクトファイルの袋にだけあります。ar archive formatです。 リンカーによって製造されたであるもの、つまりプログラムまたは共有ライブラリの場合 - リンカにこのようなバッグを提供することができます。それはバッグの中を見て、必要なオブジェクトファイルを取り出して、 リンクを実行し、をターゲットにリンクします。このバッグはリンカが必要とするオブジェクトファイルを正確に知る必要があるので、 の難しさを忘れてしまいますが、バッグ自体はリンケージに何も寄与しません。私は、単一の静的ライブラリと私の実行可能ファイルをリンクする必要がありますように

その後、私はexpatの静的ライブラリを取得できますか

は、私のユーティリティライブラリに含まれています。私は2つのアーカイブを抽出し、オブジェクトファイルを一緒にマージしたくありません。

2つのarアーカイブを組み合わせる他の方法はありません。

さらなる文脈なしで、あなたの接続の抵抗はlibexpatです。ディストリビューションのパッケージマネージャーから が利用可能です。 libexpatに依存するライブラリを作成しました。 ライブラリをリンクしているクライアントは、libexpatにリンクする必要があります。これはまったく日常的な種類の依存性 です。ドキュメント化するだけで済みます。ライブラリをパッケージ化する場合は、パッケージの依存関係に を含めてください。ほとんどの場合、新しいライブラリを作成するときには、 ライブラリが既にターゲットユーザーに提供されています。静的にすべてのライブラリに がそれ自身の依存関係をすべて組み込んだ場合、それらはすべて オペレーティングシステムのサイズであり、実用的ではありません。

+0

OK、どうすれば私のユーティリティライブラリに含まれているexpat静的ライブラリを得ることができますか?私はただ一つの静的ライブラリと実行可能ファイルをリンクする必要があります。私は2つのアーカイブを抽出し、オブジェクトファイルを一緒にマージしたくありません。 – sbunny

+0

@sbunnyこんにちは。他の方法はありません。更新を参照してください。 –

関連する問題