2011-09-06 79 views
14

實際上,有些人試圖爲Windows CE構建Boost庫,但沒有人報告過成功,甚至沒有提供這樣做所需的步驟。隨着最新發布的兩個版本(1.46和1.47)的發佈說明,他們的測試編譯器之一是「Visual C++,Windows Mobile 5,STLport:9.0」,這似乎意味着已經取得了成功(作爲附註給出的編譯器很有趣,因爲我已經能夠下載的最新STLPort是5.2.1。我是否錯過了一些東西?)。用於Windows CE的Compile Boost 1.47

我發現的帖子似乎圍繞着這裏包含的文件:http://www.boost.org/development/tests/trunk/VeecoFTC.html。事情是,我真的不知道如何使用它。我能夠爲Windows CE構建STLPort,但是按照Boost入門指南(http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html),我陷入了Boost.Build階段。我現在需要配置爲CE編譯嗎?我只是不知道要採取什麼措施,並希望得到一些指導。

這是到目前爲止,我遵循的步驟:

  1. 編譯STLPort的用於Windows CE(文檔是相當不錯的,這並不能證明太難了)。
  2. 根據入門指南安裝Boost.Build。由於bootstrap.bat文件似乎特定於「ntx86」和「ntx86_64」,所以在這一步中我有點不穩定。我已經搞砸了嗎?

在這一點上,假設我已經做正確的事情,我需要的東西跑B2像

b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage 

我想我的生成目錄是我用Boost.Build前綴,構建類型和階段將保持原樣,但我不知道要使用的工具集名稱。 VeecoFTC文件有多個msvc和stlport條目。我刪除這並不涉及到兩個條目「WM5,」但是當我用下面的命令編譯

b2 --build-dir=C:\boost-build toolset=msvc --build-type=complete stage 

我得到像一堆錯誤:

compile-c-c++ C:\boost-build\boost\bin.v2\libs\regex\build\msvc-9.0~wm5~stlport5.2\debug\threading-multi\has_icu_test.obj 
The system cannot find the path specified. 

事實上,該文件確實不存在,但has_icu_test.obj.rsp存在。我錯過了什麼嗎?我是否在正確的軌道上?

UPDATE:

因爲我不能讓Boost.Build工作,我得到了Boost.Build郵件列表上沒有愛,我已經轉移到嘗試的CMake構建系統提升:http://gitorious.org/boost/cmake。我與CEgcc結合使用這(我更熟悉Linux比Windows)和我遇到以下錯誤:

boost/config/requires_threads.hpp:47:5: error: #error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)" 

-mthreads是C的一部分,CXX flags--問題是BOOST_PLATFORM_CONFIG沒有被boost/config/select_platform_config.hpp定義。應該爲Windows CE定義什麼?我想它應該是boost/config/platform/win32.hpp(然後將定義BOOST_HAS_WINTHREADS,這將解決上述錯誤)。當select_platform_config.hpp似乎無法處理Windows CE情況時,發行說明如何宣稱這可以工作?如果BOOST_PLATFORM_CONFIG的確需要boost/config/platform/win32.hpp,那麼我需要定義_WIN32,WIN32或WIN32。我的第一反應是這些都不應該用於編譯CE。此外,VeecoFTC文件不包含任何這些。它是如何工作的?

+0

你真的使用任何需要編譯的Boost庫嗎? Boost中有很多有用的庫不需要構建。 – Daemin

+0

對,您實際使用哪些部分的助力?我個人只是使​​用標準功能的boost頭文件,如STATIC_ASSERT和boost :: mpl,並且這些東西在WinCE/VC++中工作正常。 Boost是一個巨大的圖書館藏書;當然你不需要成功編譯所有的東西。 – Qwertie

+0

關於「Visual C++,Windows Mobile 5,STLport:9.0」,這是VC++ 9,STLport爲WM5交叉編譯。是的,這看起來很有趣。 –

回答

1

您實際上不必使用助推構建來增強效果。我使用一個SCons腳本構建了一部分boost,用於需要更多控制構建選項的項目。它工作得很好。它繼續是這樣的:

import os 

env = Environment() 

boost_source = os.environ.get('BOOST_SOURCE', None) 
if not boost_source: 
    raise Exception, 'BOOST_SOURCE not set' 

env.Append(CPPPATH = [boost_source]) 

if env['PLATFORM'] == 'win32': 
    env.Append(CPPDEFINES = ['BOOST_ALL_NO_LIB']) 


VariantDir('build', boost_source + '/libs') 

import glob 
import re 

for lib in ['iostreams', 'filesystem', 'system', 'regex', 'thread', 
      'serialization']: 
    src = [] 
    path = boost_source + '/libs/%s/src' % lib 

    if lib == 'thread': 
     if env['PLATFORM'] == 'win32': 
      src.append(path + '/tss_null.cpp') 
      path += '/win32' 
      env.Append(CPPDEFINES = ['BOOST_HAS_WINTHREADS', 
            'BOOST_THREAD_BUILD_LIB']) 
     else: path += '/pthread' 

    src += glob.glob(path + '/*.cpp') 

    src = map(lambda x: re.sub(re.escape(boost_source + '/libs'), 'build', x), 
       src) 

    libname = 'boost_%s' % lib 
    if env['PLATFORM'] == 'win32': libname = 'lib' + libname 
    lib = env.Library('lib/' + libname, src) 

Clean(lib, 'build') 
Clean(lib, 'lib') 

這SCons的腳本只是搜索中列出的助推模塊的源文件,並用默認的編譯器編譯。我通過BOOST_SOURCE環境變量將路徑傳遞給boost源目錄。

這可以適用於Windows CE,因爲它可以讓您更好地控制構建過程。你也可以用make或nmake做類似的事情。

故事的寓意在於使用bjam/BoostBuild構建boost並不難。

+0

謝謝,我正在研究這個。我會確保發佈我找到的任何解決方案! – Kyle

+0

不幸的是,我無法獲得其他方法來構建。我用Boost CMake做了更多的工作,我有編譯問題。也許我對Windows開發不夠了解。讓我想念Linux。感謝您的幫助,雖然:)。 – Kyle

0

如果msvc工具集配置的工具集安裝位置的路徑不正確,您將看到這種錯誤。我在64位Windows機器上看到過這樣的錯誤,其中工具假定編譯器安裝在「C:\ Program Files」中,但它實際上位於「C:\ Program Files(x86)」中

檢查工具 - 設置配置並確保它與SDK的安裝位置相匹配。

0

我已經在x86平臺上用Windows CE 6.0成功編譯Boost.Thread,Boost.Regex,Boost.System,Boost.Chrono和Boost.Atomic。

主要工作是使WinCE更多的ANSI C compiliant。我改變了一點STLPort,並與缺少的C函數集成。然後我用STLPort構建了boost。

請看下面鏈接我張貼:

http://stackoverflow.com/questions/15906901/build-boost-c-wince

的http:// stackoverflow.com/questions/16016637/boost-c-and-windows-ce-6-0

http://stackoverflow.com/questions/15959877/windows-ce-6-0-and-runtime - 鏈接到d ebug-DLL-MDD

http://stackoverflow.com/questions/11079337/wince-5-0-using-stlport-void-operator-newsize-t-void-already-has-a-body/15814730#15814730