2011-02-08 20 views
3

私はCMakeで静的なバイナリを構築しようとしています。CMake:静的バイナリを構築する

私は周囲を見回して、いくつかの非記述的な解決策を見つけました(たとえば、リンカーフラグ「静的」を追加します)。しかし、それらをテストする方法がわかりません。

特定のライブラリ(スレッドなど)がバイナリに静的に組み込まれているかどうかを確認する方法を教えてください。

答えて

1

CMake関連ではありませんが、UNIXシステムの場合、fileユーティリティでは、バイナリが共有ライブラリを使用しているかどうかを少なくとも知ることができます。

1

Linuxでは、バイナリが動的にリンクするライブラリを示すlddコマンドを使用することもできます。

3

trenkiは、実行可能ファイルが依存し、あなたが望んでいたコードは、静的にリンクされていることを確認するためにそれをチェックすることがないダイナミックリンクライブラリのリストを取得するにはlddを使用して、言うように。

nmおよびstringsコマンドを使用して、実行可能ファイルにプログラムシンボルと人間が判読可能なテキストのダンプを取得することもできます。 grepを使用して、関数名のようにコード内で参照する静的ライブラリの識別子の出力をフィルタリングします。

最後に、objdumpコマンドを使用して、プログラムの逆アセンブリリストを取得することができます。静的ライブラリ関数がその中に現れるはずです。

最初のアプローチは、静的ライブラリが提供する機能を実証するために十分コンパイル、リンク、実行される実行可能プログラムと組み合わせて、おそらく十分なテストです。深く掘り下げたい場合にのみ、第2または第3のアプローチを使用してください。

関連する問題