2016-07-13 20 views
1

なんらかの理由で、間違ったopensslv.hヘッダがcmake経由でインクルードされていると思います。私は "OPENSSL_VERSION_NUMBER"の値がバイナリにコンパイルされていることを確認して印刷したいと思います。 どうすればいいですか?バイナリにコンパイルされた#defineはどのようにチェックするのですか?

+0

'std :: cout << OPENSSL_VERSION_NUMBER << '\ n';'? – Galik

+0

@GalikにはCとC++を混在させる特別な理由はありますか?なぜ 'std :: endl'を使わないのですか? '\ n'を使いたいなら' std :: cout'を使うつもりなら 'printf'にしてください。それはすべてのステートメントのために保持されている標準でなければならず、標準ライブラリを使い続けるべきです。 – Ingenioushax

+0

Galik、ライブラリです – Blub

答えて

0

@Galikのコメントには、ソースを編集できる場合にマクロの値を印刷することができます。

すべてがバイナリの場合は、コンパイラがソースを参照する前にプリプロセッサがそのマクロ名をその値に置き換えてしまうため、難しくなります。バイナリには元のマクロ名に戻る "リンク"は含まれていません。それは、より良いエラーメッセージを印刷して、より効果的なデバッグを行うことができますので、有効にデバッグシンボルを構築する際に

いくつかのコンパイラバイナリででき埋め込み、そのような情報(私の経験を打ち鳴らすでは最高のそれをしません)。 しかし、デバッグシンボルを持たない最適化されたバイナリでは、運が悪いことに近いです。つまり、マクロが使用されていることを知っているバイナリの逆アセンブルを開始し、潜在的な値を知っていない限り、その後、あなたはかもしれないそれを掘ることができる。

関連する問題