2011-09-06 16 views
14

Thực tế có một chút thông tin về những người đang cố gắng xây dựng thư viện Boost cho Windows CE, nhưng không ai báo cáo thành công hoặc thậm chí là các bước cần thiết để làm như vậy. Với hai phiên bản mới nhất (1.46 và 1.47), một trong các trình biên dịch thử nghiệm của họ là "Visual C++, Windows Mobile 5, với STLport: 9.0", điều này có nghĩa là thành công đã đạt được (như một lưu ý phụ trình biên dịch được đưa ra là thú vị vì STLPort mới nhất mà tôi có thể tải xuống là 5.2.1. Tôi có thiếu gì đó không?).Biên dịch tăng 1,47 cho Windows CE

Bài đăng tôi đã tìm thấy có vẻ xoay quanh tệp chứa ở đây: http://www.boost.org/development/tests/trunk/VeecoFTC.html. Vấn đề là, tôi thành thật không biết cách sử dụng nó. Tôi đã có thể xây dựng STLPort cho Windows CE, nhưng theo hướng dẫn Boost Getting Started (http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html) tôi bị kẹt ở giai đoạn Boost.Build. Tôi có cần cấu hình tại thời điểm này để biên dịch cho CE không? Tôi chỉ không biết những bước cần thực hiện và sẽ đánh giá cao một số hướng dẫn.

Đây là những bước tôi đã theo cho đến nay:

  1. Compile STLPort cho Windows CE (tài liệu là khá tốt, điều này đã không chứng minh quá khó khăn).
  2. Cài đặt Boost.Build theo Hướng dẫn bắt đầu. Tôi là một chút run rẩy trên bước này, kể từ khi các tập tin bootstrap.bat có vẻ là cụ thể cho "ntx86" và "ntx86_64." Tôi đã say rồi chưa?

Tại thời điểm này, giả sử tôi đã thực hiện những điều đúng, tôi cần phải chạy b2 với một cái gì đó giống như

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

tôi giả sử thư mục build của tôi là tiếp đầu ngữ tôi sử dụng cho Boost.Build, xây dựng loại và giai đoạn sẽ vẫn như được đưa ra, nhưng tôi không biết tên công cụ để sử dụng. Tệp VeecoFTC có nhiều mục nhập cho msvc và stlport. Tôi đã gỡ bỏ hai mục mà không liên quan đến "WM5," nhưng khi tôi biên dịch với lệnh sau đây

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

tôi nhận được một loạt các lỗi như:

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. 

Thật vậy, tập tin mà không không tồn tại, nhưng has_icu_test.obj.rsp tồn tại ở đó. Tui bỏ lỡ điều gì vậy? Tôi có đi đúng đường không?

UPDATE:

Vì tôi không thể có được Boost.Build để làm việc và đang nhận được không có tình yêu trong danh sách Boost.Build gửi thư, tôi đã chuyển sang cố gắng các CMake hệ thống xây dựng cho Boost: http://gitorious.org/boost/cmake. Tôi đang sử dụng điều này kết hợp với CEgcc (tôi quen thuộc hơn với Linux hơn Windows) và tôi đang gặp phải lỗi sau:

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

--thủ là một phần của cờ C và CXX-- vấn đề là BOOST_PLATFORM_CONFIG không được định nghĩa bởi boost/config/select_platform_config.hpp. Điều này nên được xác định cho Windows CE như thế nào? Tôi figured nó nên được tăng/config/nền tảng/win32.hpp (mà sau đó sẽ xác định BOOST_HAS_WINTHREADS, mà sẽ giải quyết các lỗi trên). Làm cách nào để ghi chú phát hành xác nhận quyền sở hữu này hoạt động khi select_platform_config.hpp dường như không xử lý các trường hợp Windows CE? Nếu BOOST_PLATFORM_CONFIG thực sự cần phải tăng/config/platform/win32.hpp, thì tôi cần xác định _WIN32, WIN32 hoặc WIN32. Phản ứng đầu tiên của tôi là không ai trong số này nên được sử dụng để biên dịch cho CE. Ngoài ra, tệp VeecoFTC không chứa bất kỳ tệp nào trong số này. Làm thế nào nó hoạt động?

+0

Bạn có thực sự sử dụng bất kỳ thư viện Boost nào cần biên dịch không? Có khá nhiều thư viện hữu ích trong Boost mà không cần xây dựng. – Daemin

+0

Phải, bạn thực sự sử dụng những phần nào của tăng cường? Cá nhân tôi chỉ sử dụng các tập tin tiêu đề tăng cường cho các tính năng tiêu chuẩn như STATIC_ASSERT và boost :: mpl, và những thứ này hoạt động tốt trong WinCE/VC++. Boost là một bộ sưu tập khổng lồ các thư viện; chắc chắn bạn không cần phải biên dịch tất cả thành công. – Qwertie

+0

Liên quan đến "Visual C++, Windows Mobile 5, với STLport: 9.0,", đây là VC++ 9, với STLport cross-compiling cho WM5. Vâng, có vẻ buồn cười theo cách đó. –

Trả lời

1

Bạn không thực sự phải sử dụng tăng cường xây dựng để tăng cường. Tôi xây dựng một phần của việc thúc đẩy bằng cách sử dụng một kịch bản SCons cho một dự án mà tôi cần kiểm soát nhiều hơn các tùy chọn xây dựng. Nó hoạt động khá tốt. Nó giống như sau:

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

Kịch bản SCons này chỉ tìm kiếm tệp nguồn trong mô-đun tăng được liệt kê và biên dịch với trình biên dịch mặc định. Tôi chuyển vào đường dẫn đến thư mục nguồn tăng thông qua biến môi trường BOOST_SOURCE.

Điều này có thể hoạt động với Windows CE vì nó sẽ cho phép bạn kiểm soát nhiều hơn quá trình xây dựng. Bạn cũng có thể làm một cái gì đó tương tự với thực hiện hoặc nmake.

Đạo đức của câu chuyện là xây dựng tăng cường bằng cách sử dụng bjam/BoostBuild không phải là khó.

+0

Cảm ơn bạn, tôi đang xem xét điều này. Tôi chắc chắn sẽ đăng bất kỳ giải pháp nào mà tôi tìm thấy! – Kyle

+0

Thật không may, tôi không thể có được các phương pháp khác để xây dựng một trong hai. Tôi đã tiến bộ hơn với công cụ Boost CMake, tôi có nhiều vấn đề về biên dịch. Có lẽ tôi chỉ không biết đủ về phát triển Windows. Làm tôi nhớ Linux.Cám ơn sự giúp đở cuả bạn :) . – Kyle

0

Đây là loại lỗi bạn sẽ thấy nếu cấu hình bộ công cụ msvc có đường dẫn không chính xác đến nơi bộ công cụ được cài đặt. Tôi đã thấy lỗi như vậy trên các máy tính Windows 64 bit, nơi các công cụ giả định trình biên dịch được cài đặt trong "C: \ Program Files" nhưng nó thực sự nằm trong "C: \ Program Files (x86)"

Kiểm tra công cụ -nhập cấu hình và đảm bảo cấu hình khớp với vị trí nơi SDK được cài đặt.

0

Tôi đã biên dịch thành công Boost.Thread, Boost.Regex, Boost.System, Boost.Chrono và Boost.Atomic dành cho Windows CE 6.0 trên nền tảng x86.

Công việc chính là làm cho WinCE trở nên phức tạp hơn ANSI C. Tôi đã thay đổi một chút STLPort và tích hợp với thiếu chức năng C. Sau đó, tôi xây dựng tăng với STLPort.

Nhìn vào liên kết sau tôi đăng:

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 -link-to-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