2009-04-05 38 views
8

Tôi đang sử dụng Bộ điều khiển Windows (WinDDK 6001.18001) để xây dựng ứng dụng không gian người dùng của tôi thay vì Visual Studio 2005. Tôi đang sử dụng phương pháp này vì chúng tôi cũng phải xây dựng các thành phần trình điều khiển, vì vậy tôi muốn có một môi trường xây dựng duy nhất xây dựng mọi thứ. Bản thân Microsoft sử dụng phương pháp này cho một số sản phẩm.Sử dụng tăng cường môi trường xây dựng WDK cho các ứng dụng?

Tính năng này hoạt động tốt cho đến khi tôi bắt đầu sử dụng Boost 1.38.0. Tôi không sử dụng C++ trong các thành phần chế độ lõi, chỉ là các ứng dụng không gian người dùng. Trong mã C++, việc sử dụng các thư viện boost là điều tự nhiên. Thật không may, WDK không đồng ý.

Lỗi đầu tiên tôi nhận thấy là "#include <cstddef>" không đặt ptrdiff_t trong namespace std, như dường như theo yêu cầu của Phụ lục D. Làm việc xung quanh này lại một số lỗi trong boost\lambda\detail\operator_return_type_traits.hpp về error C2976: 'std::basic_string' : too few template arguments. Có vẻ dư thừa với iostream .

Có ai thành công trong việc kết hợp Boost, iostream và WDK để làm việc cùng nhau không?

nguồn My file:

TARGETNAME=foobar 
TARGETTYPE=PROGRAM 

USE_MSVCRT = 1 
USE_STL = 1 
USE_ATL = 1 
ATL_VER = 30 
STL_VER = 70 
USE_NATIVE_EH = 1 
USE_IOSTREAM = 1 

SUBSYSTEM_VERSION = 5.02 

C_DEFINES = \ 
    -D_MT \ 
    -DWIN_32 \ 
    -DWIN32 \ 
    -D_WINDOWS \ 
    -DNT \ 
    -D_WIN32_DCOM \ 
    -DUNICODE \ 
    -D_UNICODE \ 
    -D_ATL_NO_DEBUG_CRT # because we are using USE_MSVCRT=1 

SOURCES=service.cpp 

INCLUDES=\ 
    $(BOOST_INC_PATH) 

TARGETLIBS=\ 
    $(SDK_LIB_PATH)\ole32.lib \ 
    $(SDK_LIB_PATH)\oleaut32.lib \ 
    $(SDK_LIB_PATH)\uuid.lib \ 

UMTYPE=console 
UMBASE=0x400000 

service.cpp:

#include <iostream> 
#include <cstddef> 

namespace std { 
     typedef ::ptrdiff_t ptrdiff_t; // DDK C++ workaround 
} 

#include <boost/lambda/lambda.hpp> 

int __cdecl main() { 
    return 0; 
} 

Trả lời

1

Thú vị câu hỏi. Sử dụng STL như là một thách thức trong chính nó với WDK. Tôi đã không mạo hiểm vượt ra ngoài. Tôi có thể thử. Hãy nhớ rằng, WDK có trình biên dịch riêng của nó mà không giống như trình biên dịch VS2005/VS2008 của bạn (kiểm tra số phiên bản). Nó rất có khả năng có một vài lỗi ở đây và ở đó.

Lưu ý rằng USE_MSVCRT=1USE_STL=1 không có gel tốt (ít nhất là cho WDK 6001).

+0

Cảm ơn bạn đã chia sẻ trải nghiệm của mình. Tôi đã thử sử dụng USE_LIBCMT = 1 thay vì msvcrt, nhưng vấn đề vẫn còn. Cho rằng ngay cả STL là vấn đề, tôi sẽ phải xem xét lại bằng cách sử dụng WDK. –

+0

Chúng tôi xây dựng phần ứng dụng của chúng tôi w/VS200x và trình điều khiển chỉ với WDK. Lưu ý, tiện ích ddkbuild chỉ là một tệp bó bao quanh các đối số dòng lệnh (tôi sử dụng nó mọi lúc) và nó có thể sẽ không giúp phân loại các vấn đề trình biên dịch. – dirkgently

+0

Tôi đề xuất sử dụng ddkbuild để xây dựng trình điều khiển và sử dụng tiêu chuẩn so với dự án để xây dựng ứng dụng. Bạn sẽ có một giải pháp mà một trong những dự án (trình điều khiển) sẽ được xây dựng với tùy chỉnh xây dựng bằng cách sử dụng ddkbuild và thứ hai (Boost) sẽ được xây dựng theo cách tiêu chuẩn. – Ilya

0

Tôi khuyên bạn nên đi theo cách khác, tức là biên dịch trình điều khiển từ VS200.x bằng cách sử dụng công cụ tốt đẹp this (ddkbuild). Là một bản thân giới hạn trong MS build utility và tôi khuyên bạn nên sử dụng môi trường VS để biên dịch dự án của bạn.

Tôi không chắc chắn nếu có một howto trong ddkbuild, nhưng nó thẳng về phía trước để tích hợp ddkbuild.bat vào tùy chọn xây dựng tùy chỉnh VS.

+0

Cảm ơn, tôi có thể sẽ đi tuyến đường này. –

+1

IMMHO, DDkbuild không có nhiều trợ giúp khi bạn có lỗi biên dịch. – dirkgently

+0

Tôi không chắc chắn 100% nhưng tôi nghĩ rằng có thể hiển thị lỗi và cảnh báo trong nhật ký VS, nhưng bất kỳ cách nào cũng giống như sử dụng xây dựng từ dòng lệnh bạn cần mở tệp nhật ký để xem lỗi. – Ilya

1

Tăng cường có thể bao gồm xung quanh vấn đề của bạn nhưng không áp dụng vì không nhận ra trình biên dịch bạn đang sử dụng (có thể do trình điều khiển hiếm khi sử dụng tăng).

Thử kiểm tra (và có thể chỉnh sửa) boost/config/select_compiler_config.hppboost/config/compiler/visualc.hpp để đảm bảo giải pháp trình biên dịch cho MSVC được bật.

Các vấn đề liên quan