2009-10-21 75 views
1

我正嘗試將一個使用Boost(特別是boost :: thread和boost :: asio)的項目遷移到VxWorks。針對VxWorks交叉編譯Boost 1.40

我無法使用vxworks gnu編譯器進行編譯。我認爲這不會是一個問題,因爲我看到boost trac上的補丁聲稱可以實現這一點,而且由於vxworks編譯器是gnu工具鏈的一部分,我應該能夠遵循the boost docs用於交叉編譯。

我建立在一個ppc vxworks的窗口上。

我按照boost文檔中的規定更改了user-config.jam文件,並使用target-os = linux選項來設置bjam,但bjam在編譯之前似乎掛起。更仔細地檢查bjam發出的命令(通過使用-n選項調用它)顯示它正在嘗試使用boost :: thread的win32文件進行編譯。這不可能是正確的,因爲vxworks使用pthread。

我的bjam命令:.\bjam --with-thread toolset=gcc-ppc target-os=linux gcc-ppc在user-config中設置爲指向g ++ ppc vxworks交叉編譯器。

我在做什麼錯?我相信我已經將這些文件記錄在了信上。

回答

0

嘗試還加入

threadapi=pthread 

你所提到的文件是Boost.Build - 這是獨立的構建工具 - 與上面的標誌是特定於Boost.Thread庫的東西。 「掛」是什麼意思?因爲Boost庫很大,所以在構建之前有時需要花費很多時間來掃描依賴關係。 如果它真的掛起,你可以在調試器中捕獲bjam併產生回溯?另外,任何輸出的日誌都會有所幫助。

2

如果它包含win32頭文件而不是pthread頭文件,那麼編譯器定義的宏集合和boost頭文件檢查的宏可能會有差異。我有一個類似智能指針頭的問題,在較舊版本的boost中會檢查__ppc,但我的編譯器定義了__ppc__(反之亦然,不記得)。

touch empty.cpp 
ccppc -dD -E empty.cpp 

這將顯示您的編譯器預定義了哪些宏。

我從來沒有試過爲VxWorks編譯boost,因爲我只需要一些頭文件。