Visual Studio 2015의 Clang 컴파일러 지원

이 글은 단순한 사용기 겸 삽질기이다.


Visual Studio 2015 SP1에서부터 Clang/C2라는 명칭으로 Clang/LLVM 컴파일러를 지원/재공한다. 이상하게도 이 도구가 설치관리자에서 보면 ‘플랫폼 간 모바일 개발’ – ‘Visual C++ 모바일 개발’항목에 있다는것인데… Clang/LLVM이 모바일용 컴파일러도아니고 왜 모바일이라는 단어가 붙어있는지 모르겠다.

vs2015
PS) 만약 Visual Studio 2015를 쓰고있지않거나 서비스팩이 적용되지않은 버전, 아니면 추가로 설치한다면 https://www.visualstudio.com/ko-kr/products/visual-studio-community-vs.aspx 이곳에서 설치관리자 받아서 설치/업데이트 가능

신기한점은 Visual C컴파일러와 목적파일이 호환된다는것. 이것은 LLVM을 직접 받아서 clang을 사용해도 마찬가지였다.  LLVM의 clang-cl에서 /MD 옵션을 주고 빌드하면 msvcrt120.dll과 같은 dll이 링크되어있다(흠좀 무섭다). 문제는 여기까지는 좋은데… 딱히 활용 방안이 없다. 분명 Clang/LLVM이 타 컴파일러에비하면 컴파일 속도가 상당한 수준으로 빠르다는것인데 왠만한 덩치가 큰 소스가 아니면 직접적으로 컴파일 속도에 대한 이점을 느끼기 힘들다는 점이다.

Qt 5.6 기준으로 리눅스/맥에서는 Clang 컴파일러를 지원하지만(애초 맥은 Xcode에서 재공하는 컴파일러가 LLVM이니…) 윈도우에서는 공식지원을 하지않는다. 직접 해본결과 처음 qmake가 빌드되기까지는 warning이 수없이 많이뜨지만 헤더 하나, 한줄만 수정하면 에러가 없이 빌드가 된다. 경고 메시지에 의한 오버헤드 때문인지 MSVC 환경에서는 약 33초만에 qmake가 빌드되고 Qt의 빌드준비가 끝나는반면, Clang을 사용하면 1분 33초나 걸린다. nmake 명령으로 Qt의 라이브러리를 빌드하려하면 잘 되는것처럼 보이지만 결국 미리 컴파일 된 헤더옵션에서 에러가 나버린다. pch옵션을 끄고 다시 시도해볼까 했지만 역시나 의미를 찾지못하여 더이상 삽질은 안했다.

Chromium같은경우 버그리포트를 보면 윈도상에서의 Clang 경고나 에러에대한 패치가 소스트리에 커밋되었다. 윈도 환경에서의 Clang 컴파일러를 사용한 빌드를 지원하는거같은데… 웹킷이란것 하나 빌드하는데 몇시간 단위로 소모되기때문에 엄두가 나질않는다. 어차피 크롬을 쓰면되니까 크로니움을 직접 빌드해 봐야 그닥 이점이 없다(…) 그저 아래 비교표에서 Clang이 월등히 빠른것과같이 아마 MSVC환경에서의 빌드보다 빠르지않을까 추측만 할 뿐.

llvm performance
윈문페이지: http://www.yosoygames.com.ar/wp/2013/12/microsoft-we-need-to-talk-about-visual-studio/


그냥 떠들다보니 이상한 방향으로 나아가버렸는데(…) MSVC에서 Clang을 쓰기위해서는 먼저 첫번째 이미지와같이 Clang with Microsoft CodeGen 항목을 깔아야하고, 플랫폼 도구 집합에서 Clang with Microsoft CodeGen을 선택하면 된다.

clang ms godegen
추가적으로 LLVM에서 직접 Clang을 받아서 설치했다면 다음과같이 LLVM이 도구 집합에 함께 나타난다. 문제라면 LLVM은 MSVC와는 컴파일러 옵션이 다르기때문에 선택해서 빌드 해 봤자 프로젝트에서 설정 된 내용들이 무용지물이다. (Clang/LLVM에서 별도로 재공하는 clang-cl은 Clang/C2처럼 MSVC와 거의 동일하게 옵션을 재공한다.)

llvm from visual studio
만약 아래화면과 같은 윈도의 지역설정이 한국어가 아닌경우 한국어 버전의 비쥬얼 스튜디오가 깔려있다면 소스파일이 유니코드 형식으로 저장되는데… 왜 혼자서 UTF-8이 아닌 UTF-16으로 저장되는지 모르겠다. Clang에서는 UTF-16을 지원 안하기때문에 각각 파일을 열어서(또는 컴파일 안되는 파일 하나하나) ‘파일’ – ‘고급 저장 옵션’에서 인코딩 항목을 ‘유니코드(서명 있는 UTF-8) – 코드 페이지 65001’로 선택하여 확인, 저장해야한다.

windows region
Clang이 MinGW32나 Cygwin과는 다르게 MSVC와 동일한 바이너리 파일을 생성한다는 것이 흥미로운데, 만약 Qt에서 Clang for Windows 버전을 지원하게되면 다시한번 빌드를 시도 해 봐야겠다.

암튼 두서없는 글 끝!

윈10 1607 버전에서 유튜브 등 전체화면 시 작업표시줄이 나타나는 문제

분명 얼마 전 업데이트 된 윈도 10이전에는 본적 없는 문제였지만 이번 1607빌드에서는 전체화면 창모드라던지, 유튜브, VLC등의 전체화면 모드에서 작업표시줄이 감춰지지 않는 문제가 생겨버렸다.

시스템 정보
(윈10 버전 1607)

작업표시줄
(이런식으로 하단을 가려버린다. 온도와 습도가 표시되는게 항상 위에표시되는 창.)

 

거의 일주일동안 왜 그런지 몰랐는데… ‘항상 위에 표시’되는 창 덕분이였다. 정확하게는 프로그램이 문제가 아니라 윈도 버그인거같다. 평소 모니터를 두개쓰고 항상 위에 표시되는 창을 보조 모니터에 두고 사용하니 유튜브든 VLC건 게임이건 자꾸 작업표시줄이 나타나는것이였다. ‘항상 위에 표시’가 되는 프로그램을 종료시키니 드디어 작업표시줄이 전체화면 창모드 윈도우를 가리지 않게된다.

작업표시줄이 왜 다른 프로그램에서 항상 위에 표시되는 창을 가지고있으면 덩달아 무조건 가장 위에 표시되는건지 도저히 납득이 가지않는 현상(…) 저번의 MSHelpsKorea 트위터 계정의 김빠지는 답변도 그렇고 문의해봐야 고객센터에 전화하라고 할거같으니 귀찮아서 멘션주기 싫어진다. MS 커뮤니티에 올려봐야 공식 보고가 되는거같지는 않고… 어차피 나만 이런거 겪는거 아닐테니 언젠가 패치되겠지(…)

 

이 문제 말고 다른 문제이지만 유튜브 같은경우엔 발생 예로 맥북에서 브라우저 띄워진 상태로 덮개를 닫고 열다보면 파이어폭스같은경우 종종 전체화면을 사용할 수 없다는 메시지가 뜨고, 크롬같은경우엔 브라우저 내에서 꽉찬화면으로 전환되고 전체화면이 안되는 때가 가끔 발생한다. 이때는 브라우저를 다시 실행하면 간단하게 해결된다.

명령 프롬프트(커맨드 라인) 사용

보통 윈도 파일 탐색기에서 모든 작업이 가능하지만 사용해야 할 때가 있다.
알아야 할건 ‘드라이브 이동’, ‘파일 목록 보기’, ‘폴더 이동’, 그리고 파일 실행. 더 있지만 필요성이 생기면 추가 예정.

 

명령 프롬프트 실행
윈도 8 이전 버전은 시작을 누른 후 ‘실행(R)’ 메뉴를 선택, 실행 윈도가 뜨면 cmd 입력 후 엔터
윈도 8이상 버전은 시작을 누른 후 cmd 입력 후 엔터

아래와 같은 화면이 실행(윈도 10부터는 아래와같이 화면이 크게 변하였다)
명령 프롬프트 화면

Continue reading 명령 프롬프트(커맨드 라인) 사용

윈도 10 업데이트 자동 재부팅 막기

윈10의 무조건 업데이트와 재부팅때문에 작업 환경을 날려먹은적이 한두번도 아니고, 얼마전엔 윈10을 다시 설치하고 손도안대고 사용하던 중 몇달을 삽질하며 코딩했던 소스코드까지도 날려먹은 일이 생겨 정리.

몇달 전엔 Microsoft 커뮤니티에 항의겸 글을 올렸지만 중재자가 알려준 답변 내용이 업데이트 항목이 있을 때 해당 업데이트를 도구를 사용하여 막아버리는 것이였다 -_-; 결국 새로운 업데이트가 있는지 잘 주시해서 잘 대처 하라는거…

암튼 구글링을 하여 알게 된 자동 재부팅을 막아버리는 방법으로는 아래와 같다.
1. 윈도키 또는 시작메뉴를 클릭하여 gpedit.msc 입력 후 엔터 (로컬 그룹 정책 편집기가 뜨지않는다면 윈도 홈 에디션)
2. 좌측 트리 리스트에서 ‘컴퓨터 구성 – 관리 템플릿 – Windows 구성 요소 – Windows 업데이트’ 선택
2016-08-13 (4)
3. ‘예약된 자동 업데이트 설치 시 로그온한 사용자가 있을 경우 자동 다시 시작 사용 안 함’ 더블클릭
4. ‘사용(E)’ 선택 후 확인
2016-08-13 (5)

 

이것 외 ‘자동 업데이트 구성’이라는 항목이 있다. 커뮤니티에 항의할 때 윈 7에서 쓰고있던 ‘자동으로 다운로드하고 설치할 때 알림’ 옵션이 윈 10에 없냐고 질문했지만 안된다고 답변 달렸었는데… 윈 10도 재공하고있었다. 도움말에 아주 자세한 설명까지 친절하게 써져있기도하다. (이 글을 쓴 시점의 윈10 버전이 1607이니 답변을 받은 당시 버전인 1511에서는 없었을지도 모른다.)
2016-08-13 (6)

 

일단 내가 원하는대로 설정 완료. 재부팅 안해도 완전하게 적용될지는 모르겠는데, 그냥 한두달 쓰다보면 이걸 설정한 효과가 있을지 알게되겠지(…)

참고내용:
http://www.tenforums.com/windows-updates-activation/17530-disable-automatic-reboot-updates.html
http://superuser.com/questions/957267/how-to-disable-automatic-reboots-in-windows-10

P.S. 홈에디션엔 저게 없다. 아쉽게도 메이커 PC에 딸려오는 OS는 윈10 홈 에디션이 대다수일텐데… 영문이지만 두번째 참고내용 링크에 설정 방법이 있으니 홈 에디션일경우까지 정리하기 귀찮고, 만약 요청이 있다면 따로 찾아서 글을 올려봐야겠다.