2012-04-26 26 views
3

AはBに依存する2つのC++パッケージAとBを持っています。この依存関係をBコードの最小部分を飲み込むことで破壊したいので、Bを投げ捨てることができます完全に。2つのC++パッケージをマージする

私はどのように私はBから持ってくる必要があるクラス/関数などで正確に見つけるためにパッケージAをプロファイリングするためのアドバイスを持っていますか?

EDIT: 私は単にパッケージBを削除して、コンパイルAのサイクルを繰り返し、Bからファイルをコピーし、それに応じてMakefile.amを更新しました。今、私は必要以上のものでパッケージAを膨らませたと確信しています。実行可能ファイル/ライブラリの中で使われていないAコードのセクションを見つけるにはどうすればよいですか?

+4

これは少し苦しいかもしれませんが、いつも 'B'を削除して、再コンパイルして何のエラーメッセージが表示されるかを見てください:)その後、ソース管理から実際に必要なものを復元してください。これを済ませたら、第2ステップとして、あなたが保持してきたものを「A」に移行することができます。 –

+0

私はそれを正確にやってきました。そして、本当に痛い。私は欠けているファイルの最初の層を引っ張って、再コンパイルして、それらが依存しているものを私に与えます。私が実際に必要としなかった最初のレイヤーファイルの半分を切り捨てると、2番目のレイヤーファイルの一部が削除される可能性があります。 – ajwood

答えて

0

多分、objdumpは役に立つ情報を提供します。バイナリ(objdump -t)で使用すると、インポートされた関数に関するいくつかの有益な情報を表示できるはずです。

1

私はアクションの3つの方法があると思う:

  1. が本当に必要なものだけをインポートするには:あなたが何をしたか元に戻すと、再びそれを行うが、今回はBからの全ファイルをコピーしませんが、単にコンパイラがあなたに指示する単一の関数がありません。

  2. 現状では、コードを分析するツール(Looking for a free source code analyzer (Function depedency tree)およびLooking for a free source code analyzer (Function depedency tree)を参照)を使用するか、すべてのAを使用して広範なコードを書いてコードカバレッジ解析を実行してください。

  3. Bからコピーしたソースの関数をコメントアウトします(ヘッダーには含まれません)。リンカは、不足している機能について不平を言うでしょう。これらのコメントを外し、ヘッダー内の宣言も含めて残りを削除します。これは最初のものと逆のアプローチです。
関連する問題