2011-10-04 12 views
1

コンパイル時に実際に使用されていないライブラリを指定するとどうなりますか?私のプログラムはまだそれに依存していますか?私のプログラムは実際にリンクされているライブラリに依存していますが、ライブラリからの関数は使用されていませんか?

私は(彼はそれを使用しない場合は、なぜ誰かがライブラリをリンクするのでしょうか?)質問は愚かなことかもしれないことを知っているが、ここではそうである:

私はソースからQTを構築していると私は、MySQLドライバを含めたいです。しかし、最後のバージョンからいくつかの変更があるので、通常は文書化された方法は使用できません。ライブラリを指定できる唯一の方法は、QT全体に対してconfigure.exeを使用することです。これは、QtCoreやQtNetworkのような他のライブラリは、このライブラリの関数を使わないにもかかわらず、g ++ ...... -lmysqlのようにコンパイルされることを意味します。問題は、これらのライブラリが実際にmysqlに依存しているかどうかです。 mysqlドライバを使用せず、mysqlライブラリが存在しない場合、私はプログラムを実行できますか?

EDIT: 私は、Windows 7上

答えて

1

をMinGWのを使用していますこれはすなわち関与コンパイラ、リンカに完全に依存します。 dpkg-shlibsは、実行可能ファイルが無用に共有ライブラリにリンクされているかどうかを判断できるので、gccのldの答えは「はい、実際はリンクされたライブラリに依存する」と思います。

+0

はできますか?多分あなたは意味ですか?それ以外の場合、私は答えを理解していません。 –

+0

@AmigableClarkKant:それはむしろ可能です。 "dpkg-shlibsは役に立たないリンケージを教えることができます" => "無駄なリンクは、dpkg-shlibsが検出できる観察可能かつ否定的な効果を持たなければなりません" – thiton

+0

私はあなたが正しいと確信しています。 .. –

2

通常、実行可能ファイルはリンク先のライブラリによって異なります。

gccを使用している場合は、リンカーフラグ--as-neededを使用できます。これにより、シンボルが使用されていないライブラリへの参照がリンカーによって省略されます。単にロードするライブラリが知覚効果を持つことができるので、それは、違いを作ることができることを

注意(自分のinitセクションはなど、実行することができる)