2

大規模なC++ライブラリのごく一部を自動抽出する方法があるかどうか知りたいのですが。

一部のプロジェクトでboost::rationalのみが必要だとしましょう。ただし、ブースト1.42全体で279 MiBを消費します!

私のプロジェクトを「自己完結型」(一部の学校の仕事ではfx)に保つために、私自身のソースとともにboost::rationalを含めることができるようにしたいと思います。(私の先生はコンパイルするために事前に何千ものライブラリをインストールする必要はないという考えです)

実際にブースト全体をインストールする方がよいので、これは良い習慣に違反していることを私は知っていますが、それでも、他の(あまり知られていない)大規模なライブラリでも議論は成り立ちます。

この抽出は、ルート#includeの#include依存関係ツリー(boost / Rational.hppなど)をたどることで簡単に実行できると思います。しかし、そのようなツールは作られましたか?その名前は何ですか?

4

1 に答える 1

2

Linux では、「ar」に「x」フラグを使用して、ライブラリからすべてのオブジェクト ファイルを抽出できます。

「nm」を使用して、コードに必要なシンボルと、それらを定義する (ライブラリ) オブジェクト ファイルを決定できます。(オプションの--demangleフラグがあり、人間が出力を読み取るのに役立つ場合があります。)

その後、必要なオブジェクト ファイルだけで構成される新しいライブラリを構築できます。( "ar " および"ranlib"経由。) または、コマンド ラインで直接コンパイル (リンク) します。

(コンパイルされた) オブジェクト コードから欠落しているシンボルを見つけて、ライブラリのどのオブジェクト ファイルでそれらを定義するかは、スクリプトを作成するだけの簡単なことです。そしてもちろん、他のライブラリ ファイルを必要とするライブラリ オブジェクト ファイルから欠落しているシンボルは何か...そして、これらの新しいライブラリ (オブジェクト) ファイルから欠落しているシンボルは…などです。等々。

要するに、(通常は)あまりにも少ない利益のために多くの作業を行うことになります。特に、ウィーク シンボルや間接参照などを使用する場合は注意が必要です。

于 2010-11-07T21:43:03.683 に答える