2011-07-12 17 views
4

オブジェクトファイル(lib*.o)をビルドするときに、.cファイルの特定の機能のみを公開するにはコンパイラ(gcc/mingw32)に指示する方法はありますか?
私がこれをやりたい理由は、静的に100,000以上のライブラリ(SQLite)にリンクしていますが、それが提供する機能のうちのいくつかを選択して使用しているということです。私はコンパイラにこれらの関数を公開するように指示することができれば、選択した数少ない関数では必要のない関数のコードをすべて最適化し、ライブラリのサイズを劇的に縮小することを期待しています。静的ライブラリ "interface"

答えて

1

私はいくつかの可能な解決策を見つけた:

これは私がについて尋ねたものです。これは、Windowsのdllexpoortのgccのと同等です:

私もリンク時のコード生成を発見しました。これにより、リンカーはコードのどの部分が実際に使用されているかを確認し、残りの部分を取り除くことができます。これをstrip-fwhole-programと一緒に使用すると、大幅に改善された結果が得られました。

注:あなたは私が作って(何をしていたかであるGCCへの1つの呼び出し、全体のプログラムをコンパイルしていない場合このフラグは理にかなっていますsqlite.oファイルを作成し、静的にリンクします)。

私が見つかりましたが、まだここで言及されるに見ていない第三の選択肢:

0

それはおそらくリンカーの仕事であり、コンパイラではありません。これをプログラム(.exe)としてリンクするとき、リンカは関連するシンボルのインポートだけを処理し、DLLをリンクするときは、__dllexportメカニズムがおそらくあなたが探しているものであるか、またはldのいくつかのフラグがあなたを助けますld)。

+0

。ソースがコンパイルされると、リンカはどのパーツが必要かを知ることができず、すべてをインポートする必要があります。 – baruch

関連する問題