2012-01-06 9 views
1

私は静的ライブラリを書く:libA.a. B.oという別のアプリケーションがあります。 B.oはlibA.aの関数を使用していません。私はlibA.oをB.oと組み合わせたいと思うので、B.oが動いているときにlibA.aのいくつかのものを他の方法で呼び出すことができます。gccに静的ライブラリを強制的にリンクさせるにはどうしたらいいですか?

私はこのようにmakefileを書きます:gcc B.c -o B.o -lA -u symbol_A。ここではGCCのマニュアルから-uです:

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

これは、未使用のライブラリをリンクする強制的に-uを使用することをお勧めして、symbol_Aは

libA.a

でいくつかのシンボルである。しかし、それは動作しません。リンクした後、私はB.oでLibA.aのものを見つけることができません。

誰かに私にいくつかのヒントを教えてもらえますか?

p.s私はGCC 3.4.4、eclipse + CDTをウィンドウの下で使用しています。そしてB.oはlinuxの下に配備されます。

+0

オブジェクトファイルまたは実行可能ファイルを作成しようとしていますか?実行可能ファイルの場合、通常は.o接尾辞がありません。あなたが関数 'symbol_A.Here'を未定義にしようとしていることで、gccはライブラリからの定義をプラグインします。これをやりたい理由は何ですか? – Karlson

+1

Bから何もlibAのものを使用しない場合、libAのものは何も追加されません。 –

+0

p.s私はGCC 3.4.4、eclipse + CDTをウィンドウ下で使用しており、B.oはlinuxの下でデプロイされます。 – user1134355

答えて

1

GCCから-uフラグの説明は次のことを意味します。

あなたはそれがかかるので、あなたのソースで定義された変数や関数別名記号は、それが定義されていないことをふりをする GCCを伝えている場合そのような変数の定義またはリンクしているライブラリの関数

は、あなたの B.clibA.a定義することができるものを持っていない場合 symbol_AB.cにより、同じトークン B.oによって必要とされていないので、だから、 -uフラグはあなたを助けにはなりませんので、単に無視されます。

+0

ありがとう!申し訳ありませんが、私はまだ投票できません。 – user1134355

関連する問題