연구 노트/C, C++

    vcpkg로 GTK 라이브러리 빌드하기

    vcpkg로 GTK 라이브러리 빌드하기

    x64 Windows 환경에서 GTK 라이브러리를 사용하기 위해 빌드하는 과정을 다룹니다. 이전 글에서 소개한 vcpkg를 이용해서 손쉽게 할 수 있습니다. 라이브러리를 빌드하는 데는 시간이 필요하므로 충분한 여유 시간을 두고 진행하시기 바랍니다. 호환성 확인하기 먼저 vcpkg가 GTK 라이브러리를 지원하는지를 확인해보겠습니다. 원하는 라이브러리가 지원되는지는 vcpkg 공식 사이트에서 Browse packages 페이지로 들어가 확인할 수 있습니다. GTK 버전 4.6.0까지 설치 할 수 있고, 호환성(Compatibility)을 보면 x64-windows를 지원한다는 것도 알 수 있습니다. 설치하기 vcpkg를 설치한 경로에 가서 아래처럼 명령을 입력합니다. ./vcpkg install gtk:x6..

    vcpkg로 C/C++ 오픈소스 패키지 관리하기

    Python은 pip, C/C++은 vcpkg! vcpkg는 마이크로소프트에서 만든 Python의 pip, Ruby의 gem, Node.js의 npm 같은 패키지 관리자입니다. Windows, Linux, macOS 그 외 여러 환경에서 오픈소스 C/C++ 라이브러리를 쉽게 설치, 관리할 수 있도록 도와줍니다. 어떤 패키지들이 준비되어 있는지 궁금하다면 공식 사이트의 Browse packages 페이지에서 확인할 수 있습니다. 개인적으로 마이크로소프트의 오픈소스에 대한 이런 행보를 무척 긍정적으로 생각하고 있습니다. vcpkg 설치는 2단계로 끝! vcpkg 설치방법은 공식 문서에 자세히 나와 있습니다. '자세히'라고 하였지만 너무 쉬워서 단 두 줄의 명령으로 설치 준비가 끝납니다. 설치를 위해서는 먼저..

    C++를 사용할 수 있는 GUI 라이브러리 모음

    C++를 사용할 수 있는 GUI 라이브러리 모음

    C++ 언어를 사용할 수 있는 GUI 라이브러리가 어떤 것들이 있는 지 얼마나 알고 계시나요? 저는 기껏해야 Windosws 환경에서 사용할 수 있는 MFC, 크로스 플랫폼을 지원하는 Qt와 GTK 그리고 wxWidgets 정도만 알고 있었습니다. 혹시 위에서 얘기한 라이브러리가 아닌 다른 것들을 찾고 있다면 아래 사이트를 꼭 참고해보시기를 바랍니다. 무려 40여 가지나 되는 C++ GUI 라이브러리를 소개한 페이지입니다. https://philippegroarke.com/posts/2018/c++_ui_solutions/ 윗글을 정리한 사람이 간단하게나마 각 라이브러리의 특징과 사용할 수 있는 운영체제 그리고 라이선스까지 적어두었습니다. 장단점도 적혀있는데 작성자의 개인 의견이기 때문에 참고만 하시면 ..

    [다시 C언어] 함수 반환형, 안적어도 될까?

    Keringhan의 "The C Programming Language"에 실려있는 예시 코드들을 보면 main 함수 반환형이 적혀있지 않은 것을 발견하였습니다. 아래 처럼요. main() { ... } 평소 같았으면 저자가 코드를 빠트렸나보다 생각했었을 것입니다. 그러나 내용을 충분히 곱씹으며 봐야 한다는 keringhan의 책이어서 혹시나 하는 마음으로 책 내용과 똑같이 반환형 없이 코드를 작성하고 빌드해 보았습니다. 결과는 아래와 같은 경고 문구가 출력되었습니다. Ex_01-03.c:3:1: warning: return type defaults to ‘int’ [-Wimplicit-int] 3 | main() | ^~~~ 그렇습니다. 이것은 경고(warning)이지 오류(error)가 아닙니다. 따라..

    [다시 C언어] 시작하며.

    왜 다시 C언어를 공부할까? RTOS를 만들어보는 공부를 시작하면서 잘 모르던 C언어 문법을 만나게 된 것이 계기입니다. 구조체를 이용한 비트 필드 표현이나 가변 인자 함수가 있다는 것을 알게 된 것도 최근 일이지요. 저는 C언어를 그래도 좀 안다고 생각했는데 너무 얕게 알고 있었던 모양입니다. 그래도 개발을 하면서 밥을 벌어 먹고사는 사람이 자신의 주력 언어는 자신 있게 '잘 안다'고 말할 수 있어야 하지 않을까 생각했습니다. 그래서 다시 C언어를 공부하기 시작했습니다. 무슨 책을 참고하지? 제가 처음 C언어를 접하게 된 것은 2013년 대학원 생활을 시작하면서였습니다. 예술과 공학을 융합한 학과에서 '비전공자' 신분으로 개발 공부를 시작하였지요. 그때는 많은 C언어 입문 ..

    C언어에서 가변 인자 함수를 만들려면?

    C언어에서 그게 되는거였어? 최근에 알게 된 사실인데 C언어도 가변 인자 함수를 사용할 수 있습니다. 가변 인자 함수가 무엇이냐 하면 함수의 인자(인수) 개수가 고정되어있지 않은 것을 말합니다. C언어라고 하면 오래된 만큼 조금 고리타분하다는 인상을 받고 있었습니다. 그래서 그렇게 유연한 기능이 있다는 것을 생각지도 않고 있었지요. 그런데 가만히 생각해보면 평소에 가변 인자 함수를 아주 흔하게 사용하고 있었습니다. 바로 printf()함수이지요. 첫 번째 인자에 출력하고자 하는 문자열 형식(template)이 들어가고 그 이후부터는 앞서 정한 형식에 들어가는 변수들을 나열하지요. 문자열 형식을 어떻게 작성했느냐에 따라 뒤따라오는 인자가 0개가 될 수도 있고 2개, 3개, 10개도 될 수 있습니다. 가변 ..

    구조체 내부 변수 뒤 이것 ':'의 정체, '비트 필드'

    변수명 뒤에 붙은 이것 ':', 뭐지? 구조체에 포함된 변수명 뒤에 콜론 기호(:)가 붙은 코드를 보게 되었습니다. 여태 본적이 없는 코드라 저것의 정체가 무엇인지 알아보았고, 그 내용을 간단히 정리하였습니다. typedef union UARTDR_t { uint32_t all; struct { uint32_t DATA:8; // 7:0 uint32_t FE:1; // 8 uint32_t PE:1; // 9 uint32_t BE:1; // 10 uint32_t OE:1; // 11 uint32_t reserved:20; } bits; } UARTDR_t; 정답은 비트 필드! 구조체 멤버 변수 뒤에 사용되는 콜론 기호(:)는 비트 필드를 구현할 때 사용하는 것입니다. 레지스터값에 직접 접근하..

    헤더 파일 중복 방지 왜 필요할까?

    헤더파일 중복을 방지하기 위해서 아래와 같은 형식을 사용합니다. #ifndef _XXXX_H #define _XXXX_H ... #endif 의미는 잘 알겠으나, 한가지 의문점이 있습니다. 일반적으로 헤더 파일에는 선언(declaration)을 합니다. 그런데 선언은 중복 되어도 에러가 발생하지 않습니다. 중복 에러가 발생할 수 있는 것은 정의(definition)입니다. 따라서 헤더 파일의 본래 목적대로 선언만을 적어놓는다면 중복 오류가 발생할 일이 없습니다. 그렇다면 왜 중복 방지를 해야할까요? 검색을 해보니 이 글에서 든 예시에서 헤더 파일에 구조체를 정의하는 것을 발견 하였습니다. 구조체를 포함하고 있는 헤더 파일에 중복 선언 방지 처리를 해놓지 않으면 문제가 발생할 수 있게 됩니다. 헤더 파일에..