2015-01-28 2 views
0

Visual Studio 2010으로 작성된 프로젝트를 Microsoft 컴파일러에서 gcc Cygwin으로 이식하려고합니다. 제 질문은 gcc Cygwin 또는 gcc가 std :: wstring을 지원합니까? 거기에 해결 방법이 있습니까?포팅 std :: wstring to gcc cygwin

+1

올바르게 기억하면 std :: wstring이 표준의 일부입니다. 나는 왜 싸이 윈드가 그것을지지하지 않는지 보지 못한다. 테스트 해 봤니? –

+0

C++ 98 표준? – MistyD

+0

예, C++ 98 –

답변

3

예. 그것은 지원하지만 쉽지는 않습니다.

wstring을 지원하려면 플랫폼에서 wchar_t 기능을 모두 지원해야합니다. q.v. 표준 C++ IOStreams 및 로케일 by Langer 및 Kreft.

"안녕하세요, wchar_t가 있고 문자 형식이 입니다. 따라서 std :: wstring을 설정할 수 있습니다." 또한 플랫폼 은 w + d 와이드 문자 I/O에 대한 지원을 제공해야합니다. wistream, wostream, facet, cvt, locale. 그리고 그것이 바로 문제가되는 이되는 곳입니다.

Windows에서 Cygwin의 경우 플랫폼은 WinAPI보다 Cygwin (및 놀랍도록 멋진 POSIX API 계층)입니다.

옆으로 : 저는는 MinGW 상황이 무엇인지 모르겠지만,는 MinGW는 방법으로 더 유닉스와 유사한 POSIX API를하는 것보다 직접 오히려 WinAPI를 사용하기 때문에,는 MinGW이 Cygwin에서 상황에되지 않을 수 있습니다.

윈도우는 아무도 이 그 시설을 사용하는 배관까지 Cygwin에서의 상당한 노력를 통과하지 것으로 나타납니다 기능, 하지만을 지원합니다. (사람들은 WinAPI를에, 오히려으로 fooA 루틴보다는 FooW 루틴입니다. 그리고 제대로 작동하려면 로케일 마법을 얻을 수있는 많은 일이있다.)

또한 Windows는 2 바이트의 wchar_t를 사용합니다. (이전의 UCS-2는 유니 코드 1.0 시대였습니다. 이제 Vista와 Win7에서는 UTF-16입니다.) Cygwin에서 4 바이트 wchar_t가 아닌 2 바이트 wchar_t를 사용하는 것은 조금 복고적입니다. 그것은 모든 것을 조금 더 어렵게 만듭니다.

더 자세한 내용은 gcc.gnu.org/ml/gcc-help로 이동 :

0

이 지원을 가지고있다. 이 코드는 g ++ 4.8에서 정상적으로 컴파일됩니다 (표준 준수 컴파일러 에서처럼).

#include <iostream> 
#include <string> 

int main(){ 
    std::wstring s(L"Hello World!"); 
    std::wcout << s; 
}