2014-01-31 38 views
1

我在C++ 11模式下編譯應用程序時出現問題,只需在dbus庫的頭文件中添加一個空白字符即可解決問題。是否可以向系統庫頭添加一個空格?

如果我這樣做 - 當我嘗試構建的庫(使用空白頭文件)嘗試鏈接到dbus(在頭文件中沒有空白的情況下構建)時,它是否會破壞?

特別地,DBUS-protocol.h包含此行:

#define DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE "<!DOCTYPE node PUBLIC \""DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER"\"\n\""DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER"\">\n" 

其中,在C successfuly編譯++ 11模式空白必須被插入如:

...PUBLIC \"" DBUS_INTROSPECT... 

多少我們真的可以在不破壞兼容性的情況下更改頭文件嗎? (我知道qt ABI兼容性指南,但我不認爲它解決了我的特定問題)

+2

這很難說。我通常會認爲在頭文件中添加一個空格將不會執行任何操作,但是您說它可以解決您的問題。發佈代碼(在您更改之前和更改之後),然後我們會理解您要求達到足夠好的級別,以便能夠回答。另外,你的問題被標記爲linux和dll。在linux下沒有dll。 – utnapistim

+0

現在添加行 – Zeks

+0

編輯之後,是的,在C++ 11中需要空白,並且不會破壞任何東西。 – Simple

回答

1

這看起來像該標題中的錯誤。除了一些真正的病態情況,添加空白不會導致不兼容,除了避免某些編譯器的錯誤。

我假設DBUS_ ...標識符擴展爲一個引號分隔的字符串,然後該字符串應該自動與該宏的其餘部分進行協調。這是一個非常安全的假設。

+0

據我所知,這在更高版本的dbus中得到修復,但我不想深入手動重新安裝庫,如果可以簡單地插入空白並完成它:) – Zeks

相關問題