私はかなり大きなC ++共有オブジェクトライブラリを書いていますが、デバッグを面倒にする小さな問題に遭遇しました。
ヘッダーファイルで関数/メソッドを定義し、そのスタブを作成するのを忘れた場合(開発中)、実行可能ファイルではなく共有オブジェクトライブラリとしてビルドしているため、コンパイル時にエラーが表示されず、その機能を実装するのを忘れました。私が何かが間違っていることを見つける唯一の方法は、実行時に、このライブラリに対してリンクしているアプリケーションが「未定義のシンボル」エラーでフォールオーバーするときです。
コンパイル時に必要なすべてのシンボルがあるかどうかを確認する簡単な方法を探しています。おそらく、Makefileに追加できるものです。
私が思いついた解決策の1つは、コンパイルされたライブラリを実行してnm -C -U
、すべての未定義の参照のデマングルされたリストを取得することです。問題は、GLibCなどの他のライブラリにあるすべての参照のリストも表示されることです。もちろん、最終的なアプリケーションがまとめられると、このライブラリと一緒にリンクされます。の出力を使用することも可能であろうnm
とするgrep
すべての私のヘッダファイルを通って、対応する名前のいずれかどうかを確認..しかし、これは非常識と思われます。確かにこれは珍しい問題ではなく、それを解決するためのより良い方法がありますか?
nm -C -u
何度も私を救ってくれました!(-u
私のシステムでは小文字に注意してください。)このコメントをここに残して、次に必要になったときに見つけられるようにします。