2011-09-06 19 views
14

için Compile Boost 1.47 Aslında, Windows CE için Boost kitaplıklarını oluşturmaya çalışan insanlar hakkında biraz bilgi var, ancak hiç kimse başarı bildirmedi ya da bunu yapmak için gerekli adımları attı. En son iki sürümle (1.46 ve 1.47), sürüm notları, test derleyicilerinden birinin "Visual C++, Windows Mobile 5, STLport: 9.0" olduğunu belirtti ve bu da başarının başarıldığını gösteriyor (yan not olarak). verilen derleyici, indirdiğim en son STLPort 5.2.1 'dir.Windows CE

Bulunan yayınlar, burada bulunan dosyanın etrafında dönüyor gibi görünüyor: http://www.boost.org/development/tests/trunk/VeecoFTC.html. Mesele şu ki, onu nasıl kullanacağımı bilmiyorum. Windows CE için STLPort oluşturabiliyordum, ancak Boost Başlangıç ​​Kılavuzu'nu (http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html) takip ederek Boost. Bu noktada CE için derleme yapmam gerekiyor mu? Sadece hangi adımları atmam gerektiğini bilmiyorum ve bazı rehberliği takdir ediyorum.

Bunlar

şimdiye kadar takip ettim adımlar şunlardır:

  1. Windows CE için Derleme STLPort (dokümantasyon bu çok zor ispat etmedi, oldukça iyi idi).
  2. Başlarken Kılavuzuna göre Boost. Bootstrap.bat dosyasının "ntx86" ve "ntx86_64" gibi görünmesi nedeniyle bu adımda biraz titrek davranıyorum. Zaten batırdım mı? Ben doğru şeyleri yaptım varsayarak Bu noktada

, benim build dizini ben Boost.Build için kullanılan önek olduğunu varsayalım

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

gibi bir şeyle b2 çalıştırmak gerekir inşa tür ve sahne verilen şekilde kalır, ancak hangi araç seti adını kullanacağımı bilmiyorum. VeecoFTC dosyasının msvc ve stlport için birden çok girişi vardır. Ben "WM5" ile ilgili YAPMADIĞIMIZ iki kaldırılmış girişler ama şu komutla derleme yaparken

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

ben gibi hataların bir demet olsun:

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. 

Nitekim, bu dosya yok yok, ancak has_icu_test.obj.rsp var. Bir şey mi eksik? Doğru yolda bile miyim?

GÜNCELLEME:

ben alamıyorum yana Boost.Build çalışmak ve Boost.Build posta listesinde hiç sevgi alıyorum, ben CKağıt Boost için sistem inşa çalışırken geçti ettik: http://gitorious.org/boost/cmake. Ben CEgcc ile birlikte bu kullanıyorum (Ben daha tanıdık Windows daha Linux ile kulüpler) ve ben aşağıdaki hata çalıştırıyorum:

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 parçasıdır ve cxx flags-- Sorun şu ki, BOOST_PLATFORM_CONFIG, boost/config/select_platform_config.hpp tarafından tanımlanmamıştır. Bu, Windows CE için ne tanımlanmalıdır? Boost/config/platform/win32.hpp (daha sonra yukarıdaki hatayı çözecek olan BOOST_HAS_WINTHREADS öğesini tanımlar) gerektiğini düşündüm. Sürüm notları, select_platform_config.hpp Windows CE vakalarını ele almıyorken bu durumun nasıl çalıştığını nasıl iddia edebilir? Eğer BOOST_PLATFORM_CONFIG gerçekten de destek/config/platform/win32.hpp olması gerekiyorsa, o zaman ya _WIN32, WIN32 veya WIN32 tanımlamalıyım. İlk tepkim, bunların hiçbirinin CE için derlenmemesi gerektiğidir. Ayrıca, VeecoFTC dosyası bunlardan hiçbirini içermez. O nasıl çalışır?

+0

Gerçekten derleme gerektiren herhangi bir Boost kütüphanesi kullanıyor musunuz? Boost'ta binaya ihtiyaç duymayan pek çok kullanışlı kütüphane var. – Daemin

+0

Doğru, hangi destek parçalarını kullanıyorsunuz? Kişisel olarak sadece STATIC_ASSERT ve boost :: mpl gibi standart özellikler için boost başlık dosyalarını kullanıyorum ve bu şeyler WinCE/VC++ 'da iyi çalışıyor. Boost, devasa bir kütüphane koleksiyonudur; Elbette, hepsini başarıyla derlemenize gerek yoktur. – Qwertie

+0

"Visual C++, Windows Mobile 5, STLport: 9.0" ile ilgili olarak, bu, WM5 için STLport çapraz derlemesiyle birlikte, VC++ 9'dur. Evet, bu şekilde komik görünüyor. –

cevap

1

Yükseltme oluşturmak için yükseltici yapı kullanmanız gerekmez. Yapım seçenekleri üzerinde daha fazla kontrole ihtiyaç duyduğum bir proje için SCons komut dosyasını kullanarak destek parçasını oluşturdum. Oldukça iyi çalıştı.

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') 

Bu Scons betiğide listelenen boost modüllerde kaynak dosyaları arar ve varsayılan derleyici ile derler: Böyle bir şey çıktı. Boost kaynak dizininin yolunu BOOST_SOURCE ortam değişkeni üzerinden geçiriyorum.

Bu, Windows CE için, oluşturma işlemi üzerinde size daha fazla denetim sağlayacağı için işe yarayabilir. Ayrıca make veya nmake ile benzer bir şey yapabilirsiniz.

Hikâyenin ahlakı, bjam/BoostBuild kullanarak dışarı çıkmak ile o kadar da zor değil.

+0

Teşekkür ederim, buna bakıyorum. Bulduğum herhangi bir çözümü gönderdiğinden emin olacağım! – Kyle

+0

Maalesef, başka yöntemler de oluşturamıyorum. Boost CMake ile daha fazla ilerleme kaydettim, derleme sorunlarıyla uğraşıyorum. Belki de Windows geliştirme hakkında yeterli bilgiye sahip değilim. Beni özledim Linux.Yardımınız için teşekkürler :). – Kyle

0

Bu, msvc araç kümesi yapılandırmasının, araç kümesinin yüklü olduğu bir yanlış yola sahip olup olmadığını göreceğiniz bir hata türüdür. Araçların derleyicinin "C: \ Program Files" içine yüklendiğini, ancak aslında "C: \ Program Files (x86)" içerdiği 64-bit windows makinelerinde böyle hataları gördüm.

Aracı kontrol edin -set yapılandırması ve SDK'nın kurulu olduğu konumla eşleştiğinden emin olun.

0

Boost.Thread, Boost.Regex, Boost.System, Boost.Chrono ve Boost.Atomic için bir x86 Platformunda Windows CE 6.0 ile derledim.

Büyük çalışma, WinCE'yi daha fazla ANSI C ile uyumlu hale getirmekti. Biraz STLPort değiştirdim ve eksik C fonksiyonu ile entegre oldum. Sonra STLPort ile destek ürettim.

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

http: Ben yayınlanmıştır aşağıdaki bağlantıda

Bak // stackoverflow.com/questions/16016637/boost-c-and-windows-ce-6-0

http://stackoverflow.com/questions/15959877/windows-ce-6-0-and-runtime -link-için-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

İlgili konular