2010-03-19 103 views
0

我試圖編譯一個第三方庫,但G ++抱怨以下行:編譯失敗 - 無的#include - 升壓

typedef boost::shared_ptr<MessageConsumer> MessageConsumerPtr; 

奇怪的是,就在沒有#include指令該文件 - 顯然應該是這樣的;大約有60個文件具有相同(或非常相似)的問題。顯然,如果有一個#include指令引用相關的boost頭文件,這將會乾淨地編譯。

我的問題是:我怎麼能得到G ++以某種方式自動地找到相關的符號(在這個問題上的所有實例,它是無法找到一個命名空間 - 通常std::boost::)通過自動地處理有關頭(或其他機制)。

謝謝。

編輯

我現在的G ++調用看起來像:

g++ -fPIC -O3 -DUSING_PCH -D_REENTRANT -I/usr/include/boost -I./ -c MessageInterpreter.cpp -o MessageInterpreter.o 

回答

2

可以使用-include命令行選項:

g++ -include boost/shared_ptr.hpp ... 

從手冊頁:

-include file 處理文件就好像「#include」文件「」作爲主源文件的第一行 出現。但是,搜索 文件的第一個目錄是預處理程序的工作目錄,而不是包含主源文件的 目錄。如果在那裏找不到,則在「#include」...「」search 鏈的其餘部分搜索其 。

+0

感謝 - 修正了它 - 現在我必須經歷並找到所有30奇怪的遺失包括... – jwoolard 2010-03-19 16:43:11

1

創建您自己的包裝.h文件,其中包括boost.h然後破壞.h。或者(非常脆弱)確保您在每次使用破碎的.h和boost .h之前進行測試。

0

也許第三方庫的設計方式應該總是包含某個「主」頭文件,以便正確地獲得依賴關係。

否則,您可以在包含提供錯誤消息的第三方頭文件之前添加#include <boost/shared_ptr.hpp>