본문 바로가기

C/C++

vcpkg vcpkg로 C++ 라이브러리 쉽게 관리하기C++로 프로젝트를 진행하다 보면, 다양한 외부 라이브러리를 사용할 때가 많습니다. 하지만 C++의 복잡한 의존성 관리 때문에 라이브러리를 설치하고 관리하는 것이 까다로울 수 있습니다. 이를 쉽게 해결하기 위해 vcpkg라는 툴이 많은 사랑을 받고 있는데요, 이번 포스트에서는 vcpkg를 설치하고 사용하는 방법을 알아보겠습니다.1. vcpkg란 무엇인가?vcpkg는 마이크로소프트가 제공하는 C++ 패키지 관리자입니다. 다양한 오픈 소스 C++ 라이브러리를 쉽게 설치하고 관리할 수 있도록 도와줍니다. Linux, Windows, MacOS에서 모두 사용할 수 있으며, Visual Studio와도 쉽게 통합할 수 있어 개발 속도를 크게 높여줍니다.2. vcpkg 설.. 더보기
Visual Studio로 리눅스 개발하기 Visual Studio 2017/2015로 리눅스 개발하기 Visual C++ 2015/2017에서는 리눅스에서 개발할 수 있는 환경을 제공한다. 그리고 아래 링크에 툴셋 설치, 세팅, 디버깅 방법 등 모두 나와 있으니 따라하자.https://blogs.msdn.microsoft.com/vcblog/2017/04/11/linux-development-with-c-in-visual-studio/ 개념은,ssh로 해당 리눅스에 접속하여, 프로젝트의 모든 파일을 리눅스에 복사하여 컴파일한다.(파일이 많을 경우는 어떻게 하지?)그래서 파일 경로와 같은 모든 환경을 리눅스에 맞춰 세팅해야 한다. 더보기
SSO (short string optimization) c++에 SSO (Short String Optimization) 라는 개념이 있다.Effective Modern C++ 책을 보다가 검색한 걸 정리해 본다.[1]의 내용을 정리한 것이다. new/malloc를 사용하지 않고 배열로 만든 문자열은 스택에 저장이 되는데,이는 new/malloc를 사용하여 힙에 메모리를 할당한 것보다 속도면에서 빠르다. 그러나 배열은 고정된 사이즈를 사용해야 하는 반면, new/malloc를 사용하면 동적으로 사이즈를 정할 수 있다.또한 스택의 크기는 제한적인 반면, 힙 영역은 시스템 메모리 만큼 사용할 수 있다. std::string는 보통 힙영역에 문자열을 저장한다. (new char [size]를 한 것처럼)이렇게 해야 아주 큰 문자열도 스택 오버플로우 없이 저장할수 .. 더보기
[c++14] 함수 실행 시간 측정 함수 실행 시간 측정을 하려면,실행 전 시간을 체크하고, 실행 후 시간을 체크해서 차이를 계산해주어야 한다.그러나, 아래 템플릿을 이용해서 쉽게 할수 있다. templatestatic auto duration(F&& func, Args&&... args){ using namespace std::chrono; auto start = steady_clock::now(); auto ret = std::forward(func)(std::forward(args)...); auto dur = duration_cast(steady_clock::now() - start); TRACE(_T("dur : %d\n"), dur.count()); return ret; } 사용은 대충 이렇게..#include int func(.. 더보기
Remote Debugging Visual C++ 2015 [1]의 포스트에서 허락없이 퍼옴 This describes how to configure your system to do remote debugging when you are using Visual Studio 2015. There is no installer for the debug DLLs, so you need to work around this problem. Among other things, these instructions solve this error message: The program can't start because ucrtbased.dll is missing from your computer. These instructions take extra steps to handle th.. 더보기
[windows] curl 빌드 및 사용 windows에서 curl 빌드 및 사용하기 curl은 데이터 전송하는 툴 및 라이브러리로서, [1]의 공식 홈페이지를 참고한다. http, ftp, telnet, ldap, pop3, smtp등 많은 프로토콜을 지원하며, 이 프로토콜을 이용한 업로드/다운로드, 프록시, 인증, 쿠키 등의 기능도 지원한다. [2]와 [3]에서 참고한 내용을 바탕으로 다시 정리해 본다. 빌드의 내용은 [2]를 참고 했으며, [3]에는 설치 및 사용법 등이 자세히 나와 있다. 1. 다운로드 - 직접 다운로드 > https://curl.haxx.se/download.html - Github > https://github.com/curl/curl 2. curl 빌드 ([2]에 이미지를 포함한 상세한 설명이 있으니 참고) - gi.. 더보기
[MFC] CWebBrowser2 내장 IE 브라우저 이슈 MFC의 내장 IE 브라우저 사용하기 https://msdn.microsoft.com/ko-kr/library/aa752046%28v=vs.85%29.aspx 위 내용을 따라서 해보면, MFC에서 대충 'CWebBrowser2' 이런 클래스를 만들어 준다. 그런데, 문제가 좀 많다. 이 내장 브라우저 버전이 '7.0' 이다. (xp에서는 6.0) 그렇게 때문에 다음의 자바스크립트에서 오류가 많이 발생한다. jQuery에서도.. 일단 아래 링크와 같은 방법을 찾았으며, 혹시 링크가 깨지는 상황이 올까봐 간략 정리한다. https://indidev.net/forum/viewtopic.php?f=4&t=414 (참고로 xp에서는 아무 방법도 안된다. xp에서 테스트하는 내가 이상한거지..) 1. 에러 우회하기.. 더보기
Making the Visual C++ 6.0 debugger not 'step in' Visual C++ 6.0 디버깅에서 F11(step into) 패스하기 (?) 2016년 현재, Visual Studio 6.0을 쓴다. -_-;;;;;; 디버깅 시 F11을 눌러 Step Into를 하게 되는데,CString 같은 걸 만나면 생성자나 operator까지 step in 하는 경우가 많아 짜증난다.이러한 문제를 해결하기 위해 MS에서 제공한 방법이 있다. 아래 경로에서 'AUTOEXP.DAT'파일을 찾아서 연다. >> C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin그리고 아래 3줄을 추가한다. [ExecutionControl] CString::CString=NoStepInto CString:::operator=NoSte.. 더보기
[Inno Setup]이노셋업 각종 기능들 내가 회사에서 만든 이노셋업 여러가지 기능들이 있다. - 커스텀 다이얼로그 생성 - 제어판 '프로그램 제거'에 표시되는 이름 변경 - 설치 전에 실행파일 종료하는 기능 - dll 임포트 - 셋업파일이름을 커맨드로부터 받아서 생성하기 - 커스텀 메시지 출력 - 기타등등 그리고 아래처럼 bat파일을 만들어서 실행한다."%~dp0\..\..\Inno Setup 5\ISCC.exe" /DpackageName="셋업파일이름" "%~dp0\innosetup_yd.iss" >%~dp0 : 현재 경로를 얻어오기 더보기
멀티바이트 <-> 유니코드 나는 지금 멀티바이트와 유니코드를 변환하는데, 큰 애로사항을 겪고 있다.CA2W를 사용하여 변환하였더니, 어떤 컴퓨터(한국어 윈도우즈)에서는 동작하지 않는다.MultiByteToWideChar를 사용하여 변환하였더니 영문 윈도우에서 동작하지 않는다. MultiByteToWideChar와 관련한 아래의 해결책을 찾아서 블로그에 정리하였다. 멀티바이트 코드를 유니코드로 변경할 때 다음과 같은 방법이 있다. wchar_t* pszUnicode = NULL;int len = ::MultiByteToWideChar(CP_ACP, 0, pszMultiByte, -1, pszUnicode, 0); pszUnicode = new wchar_t[len+1]();::MultiByteToWideChar(CP_ACP, 0, .. 더보기