다음을 통해 공유


UNIX에서 Win32로 이식

업데이트: 2007년 11월

응용 프로그램을 UNIX에서 Windows로 마이그레이션할 때는 다음과 같은 옵션이 있습니다.

  • UNIX 라이브러리를 사용하여 응용 프로그램을 UNIX에서 Win32로 이식

  • 응용 프로그램을 네이티브 방식으로 UNIX에서 Win32로 이식

  • Windows에서 POSIX 하위 시스템을 사용하여 UNIX 응용 프로그램 실행

UNIX 라이브러리

UNIX 프로그래머가 일반적으로 고려하는 첫 번째 옵션은 타사의 UNIX 방식 라이브러리를 사용하여 UNIX 코드가 Win32 실행 파일로 컴파일되도록 하는 것입니다. 일부 상업용 라이브러리와 적어도 하나의 공용 라이브러리에서 이 작업을 수행합니다. 이 옵션은 일부 응용 프로그램을 위한 옵션입니다. 이러한 이식 라이브러리의 장점은 이식에 필요한 초기 작업을 최소화한다는 점입니다. 반면, 경쟁력 있는 소프트웨어 제품으로서의 주요 단점은 응용 프로그램을 네이티브 방식으로 Win32로 이식하면 일반적으로 더 빠르고 더 많은 기능을 가진다는 점입니다. 더욱 강력한 기능을 위해 응용 프로그램을 UNIX 셸에서 Windows로 이식하여 Win32를 호출하는 것은 지나치게 복잡할 수 있습니다.

다음 목록에서는 UNIX에서 Visual C++로의 이식 및 마이그레이션 지원을 위한 Microsoft 및 타사 리소스를 보여 줍니다.

UNIX 마이그레이션 가이드

UNIX 사용자 지정 응용 프로그램 마이그레이션 가이드에서는 UNIX에서 Win32 환경으로 코드를 마이그레이션하는 데 필요한 기술적인 도움말 정보를 제공합니다.

https://go.microsoft.com/fwlink/?LinkId=95428

Unix 마이그레이션 프로젝트 가이드는 UNIX 사용자 지정 응용 프로그램 마이그레이션 가이드에서 미처 설명하지 못한 내용을 보충 설명하고 있으며 UNIX에서 Win32로 중요한 프로젝트를 마이그레이션하는 데 필요한 고급 수준의 도움말을 제공합니다. 이 가이드에서는 프로젝트 마이그레이션의 각 단계마다 고려해야 할 문제점에 대해서도 설명합니다. 이 가이드는 다음 위치에서 다운로드할 수 있습니다.

https://go.microsoft.com/fwlink/?linkid=20012

Microsoft Windows SFU(Services For UNIX)

Microsoft Windows SFU(Services For UNIX)에서는 Windows를 기존 UNIX 기반 환경에 통합하기 위한 광범위한 플랫폼 간 서비스를 제공합니다. SFU에서는 파일 공유, 원격 액세스 및 관리, 암호 동기화, 공용 디렉터리 관리, 공통 유틸리티 집합 및 셸을 제공합니다.

Windows Services for UNIX

InteropSystems.com

http://www.interopsystems.com/

UNIX에서 Win32로의 이식을 지원하기 위한 소프트웨어를 제공하는 타사 사이트입니다.

C++ Boost 웹 사이트

http://boost.sourceforge.net/regression-logs/

http://boost.sourceforge.net/boost-build2/

UNIX 응용 프로그램을 Win32로 직접 이식

다른 옵션은 UNIX 응용 프로그램을 Win32로 직접 이식하는 것입니다. ANSI C/C++ 라이브러리와 상업용 C 컴파일러 라이브러리를 사용하면 UNIX 응용 프로그램에서 의존하는 일반적인 시스템 호출의 대부분을 Win32 응용 프로그램에서 사용할 수 있습니다.

Win32 콘솔 API는 stdio 모델을 모방하며 Win32 콘솔 API를 사용하는 curses 버전이 있으므로 stdio 기반 응용 프로그램의 출력 모델을 변경할 필요가 없습니다. 자세한 내용은 SetConsoleCursorPosition을 참조하십시오.

버클리 소켓 기반 응용 프로그램은 Win32 응용 프로그램으로 작동하기 위해 변경이 거의 필요하지 않습니다. Windows 소켓 인터페이스는 BSD 소켓과의 이식성을 위해 디자인되었으며 여기에는 WinSock 사양의 소개 단원에서 언급한 최소한의 변경 내용이 포함되어 있습니다.

Windows에서는 DCE 규격 RPC를 지원하므로 RPC 기반 응용 프로그램을 쉽게 사용할 수 있습니다. RPC Functions를 참조하십시오.

가장 큰 차이점 중 하나는 프로세스 모델에 있습니다. UNIX에는 fork가 있는 반면 Win32에는 없습니다. fork 및 코드 베이스의 사용 여부에 따라 Win32에서는 CreateProcessCreateThread라는 두 개의 API를 사용할 수 있습니다. 자체 복사본을 여러 개 포크하는 UNIX 응용 프로그램은 여러 프로세스 또는 여러 스레드가 있는 하나의 프로세스를 포함하도록 Win32에서 다시 작동할 수 있습니다. 여러 프로세스가 사용되는 경우에는 프로세스 간 통신에 사용할 수 있으며 fork에서 제공하는 기능이 필요할 경우에는 새 프로세스의 코드 및 데이터를 부모와 유사하게 업데이트하는 데 사용할 수 있는 IPC의 여러 메서드가 있습니다. IPC에 대한 자세한 내용은 Interprocess Communications를 참조하십시오.

Windows 및 UNIX의 그래픽 모델은 매우 다릅니다. UNIX에서는 X Window 시스템 GUI를 사용하는 반면 Windows에서는 GDI를 사용합니다. 개념적으로는 유사하지만 X API와 GDI API를 간단히 매핑할 수는 없습니다. 그러나 UNIX OpenGL 기반 응용 프로그램을 마이그레이션하는 데는 OpenGL 지원을 사용할 수 있습니다. 또한 Windows를 위한 X 클라이언트와 X 서버가 있습니다. GDI에 대한 자세한 내용은 Device Contexts를 참조하십시오.

대부분의 CGI 응용 프로그램을 비롯한 기본 UNIX 응용 프로그램은 Windows에서 실행되는 Visual C++로 쉽게 이식됩니다. open, fopen, read, write 등의 함수는 Visual C++ 런타임 라이브러리에서 사용할 수 있습니다. 또한 C UNIX API와 Win32 API를 일대일로 매핑할 수 있습니다. 즉 openCreateFile, readReadFile, writeWriteFile, ioctlDeviceIOControl, closeCloseFile 등으로 매핑할 수 있습니다.

Windows POSIX 하위 시스템

UNIX 프로그래머가 선택할 수 있는 다른 옵션은 Windows POSIX 하위 시스템을 사용하는 것입니다. 그러나 이 경우에는 Windows NT가 만들어질 때 표준화된 유일한 POSIX 버전이었던 POSIX 1003.1만 지원됩니다. 그 이후에는 대부분의 응용 프로그램이 Win32로 변환되었기 때문에 이 하위 시스템을 확장할 필요가 거의 없었습니다. 1003.1 시스템은 1003.2에서처럼 네트워크 지원 등의 다양한 기능을 포함하고 있지 않으므로 완전한 기능의 응용 프로그램에는 그다지 유용하지 않습니다. Windows POSIX 하위 시스템에서 실행되는 전체 기능을 가진 응용 프로그램은 Win32 응용 프로그램에서 사용할 수 있는 메모리 매핑 파일, 네트워킹, 그래픽 등의 Windows 기능에 액세스할 수 없습니다. Windows POSIX 하위 시스템의 주 대상은 VI, LS, GREP 등의 응용 프로그램입니다.

참고 항목

개념

유추 규칙

참조

UNIX

기타 리소스

프로그램 이식 및 업그레이드