2009-11-11 29 views
3

我有一個使用Boost.Asio和Media-Decoding-Samples附帶的英特爾IPP庫的項目。問題是以下。如果我編譯項目時未定義WIN32_LEAN_AND_MEAN,則Asio抱怨臭名昭着的「winsock.h已包含」錯誤。如果我定義宏,另一個庫中的頭文件就有未定義的類型,因爲它依賴於windows.h,包括winsock.h。我嘗試手動將winsock.h添加到該標題,但這使得Boost.Asio再次呼喊。我能想到的唯一解決方案是通過每個編譯單元,並確保首先包含Asio。由於項目的規模和複雜性(以及該解決方案的醜陋),我希望找到更好的方法。使用winsock.h庫的問題

在此先感謝!

回答

4

如果你分離你的源代碼並確保不在你的應用程序中使用某種共同的頭文件,那麼你就可以解決這個問題,這個頭文件包含了Asio和IPP。因此,需要Asio的源文件包括Boost頭文件,需要IPP的源文件包括IPP頭文件,但需要引用的頭文件不應包含任何外部頭文件,並根據需要使用前向聲明。

+0

同意 - 聽起來像#includes需要合理化。在同一個編譯單元中使用winsock.h和boost.asio(使用winsock2.h)沒有任何意義。 – 2009-11-11 12:33:40

0

「在其他圖書館的標題是未定義類型」

多少?多麼複雜?也許你可以定義這些類型?