2016-07-13 82 views
1

由於某種原因,通過cmake包含錯誤的opensslv.h頭文件,或者我認爲。我想確定並打印出「OPENSSL_VERSION_NUMBER」的哪個值編譯到我的二進制文件中。 我該怎麼做?如何檢查哪個#define被編譯爲二進制文件?

+0

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

+0

@Galik是否有任何特定的原因混合C和C++?爲什麼不使用'std :: endl'?如果你想使用'\ n',它應該只是一個'printf',如果你打算使用'std :: cout'那麼這應該是所有語句的標準,並且應該繼續使用標準庫。 – Ingenioushax

+0

Galik,這是一個圖書館 – Blub

回答

0

正如@Galik所說的評論,如果你可以編輯源代碼,你可以打印出宏的值。

如果您擁有的只是一個二進制文件,那麼它會變得很難,因爲在編譯器看到源文件之前,預處理器將用其值替換宏名稱。所以二進制文件不包含任何「鏈接」回到原始的宏名稱。

一些編譯器並啓用這樣就可以打印更好的錯誤信息,使調試更有效的調試符號建立時(以我的經驗鐺做它最好的)二進制可以嵌入這樣的信息。 但是,在沒有調試符號的優化二進制文件中,您將接近失敗。也就是說,除非你開始通過反彙編二進制文件來了解使用宏的位置,並且知道它可能需要的潛在值。那麼你可能能夠挖掘出來。

相關問題