라벨이 Windows XP인 게시물 표시

C++ Boost 라이브러리를 Windows XP 에서 동작하도록 빌드하기

이미지
안녕하세요~ 반갑습니다! C++ 개발자 여러분~ boost 많이 쓰시죠?? 저도 boost 참 좋아합니다 ㅎㅎ 이렇게 좋은 boost 를 Windows XP/2003 환경에서 사용할 때는 그냥 일반적인 방법으로는 사용이 불가능한데요. 그래서 오늘은 Windows XP 환경에서 동작하도록 boost 를 빌드하는 방법에 대해서 알아보도록 하겠습니다! 참고로 제가 설명할 방법은 100% 완벽하게 검증된 방법은 아니며, 제가 조사/연구를 통해 알아낸 방법입니다. 따라서 문제가 있을 수도 있으므로 참고자료정도로만 사용해주시면 감사하겠습니다. 그리고 이 포스팅에서는 Visual C++ 2015 Update 3 를 사용한다고 가정하고 설명하겠습니다. 또한, 이 포스팅에서 말하는 Windows XP 는 정확히 말하면 XP Service Pack 3 를 뜻합니다. 1단계) 사용하려는 라이브러리가 XP 를 지원하는 지 확인한다. 일단 첫 번째 단계는 사용하려는 라이브러리가 Windows XP 를 지원하는 지 확인하는 과정입니다. 다행히도 Boost 의 대부분 라이브러리는 XP 환경에서 잘 돌아갈텐데, 경우에 따라서 XP에서는 기능이 제한되거나 오동작을 일으킬 수 도 있으니, 라이브러리가 XP 를 지원하는 지 여부를 검토할 필요성이 있습니다. 근데 아쉽게도 라이브러리들이 XP 를 지원하는 지 여부가 명백하게 정리된 글같은 건 없어 보입니다 ㅜㅜ 그리고, 각 라이브러리의 레퍼런스를 봐도 잘 안나오는 경우가 많죠. 결국, 부스트 커뮤니티 혹은 스택오버플로우의 글들을 뒤지거나 직접 질문을 해서 도움을 얻어야 합니다. 그리고 직접 라이브러리 내부 소스코드를 까서 XP 지원 여부를 파악해야 할 수도 있습니다. 그리고, 무엇보다 실제로 라이브러리를 사용하는 프로그램을 XP에서 동작시켜서 잘 동작하는지 직접 확인하는 과정도 꼭 필요합니다. 이 글 은 2015년도에 부스트 커뮤니티에 올라왔던 Windows XP 지원 관련 설문인데 한번 읽어보셔도 좋을 것 같습니다. XP...

VC++2015 에서 vc140_xp의 내부 원리

Visual Studio 2015에서 C++프로젝트 플랫폼 도구 집합으로  vc140_xp 을 사용했을 때, vc140에 비해 내부적으로 바뀌는 점들을 한번 분석(?) 해봤다. (완벽한 내용은 아닐 수 있다..) 1. Windows SDK을 XP를 지원하는 옛날 버전으로 변경.   * VC Directories에서 Windows SDK의 include, lib, bin 폴더 경로를 변경   * 원래 vc140이 v8.1 버전을 사용했다고 하면, vc140_xp로 플랫폼도구집합 변경 시, v7.1A를 사용하는 식으로 바뀜.   * v7.1A는 xp를 지원함.  (https://en.wikipedia.org/wiki/Microsoft_Windows_SDK ) 2. CL 컴파일시 _USING_V110_SDK71_ 매크로를 정의함.   * VC++의 라이브러리들 (ATL/MFC 라이브러리, C++표준라이브러리의 헤더파일들이 이 매크로에 영향을 받음.)   * _USING_V110_SDK71_ 매크로가 큰 영향을 주진 않는다. (하지만, 조금이더라도 분명 영향을 미친다.)   * 예를 들면, 이 매크로가 정의되어 있는 경우, C++표준라이브러리에서 std::shared_mutex 가 정의되지 않는다. 3. 링크시, /SUBSYSTEM:CONSOLE",5.01" (or 5.02) 옵션을 사용. (구성 형식이 EXE 일 경우)   * vc140의 경우에는 /SUBSYSTEM:CONSOLE 옵션이 링크시 사용되는데, vc140_xp의 경우 /SUBSYSTEM:CONSOLE",5.01" 이 사용됨. (64bit에서는 5.01이 아니라 5.02)   * 이 링크옵션은 완성된 PE파일의 서브시스템 버전에 영향을 줌.   * 서브시스템 버전이 명시되지 않은 채로 링크되면, PE파일의 서브시스템이 6이상이 되고, 프로그램이 XP에서 실행되지 않음.  ...