You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Windows 11 + MSVC 환경에서 ThorVG와 ThorVG Example을 빌드했습니다.
공식 README의 빌드 안내는 네 줄 정도로 짧은데, 리눅스/맥 기준이라 윈도우에서는 그 앞뒤로 준비할 게 더 있었습니다. 중간에 네 번 정도 막혔고, 아래는 최종적으로 성공한 경로입니다. 겪은 에러도 같이 적어두었으니 같은 환경이신 분들은 참고해 주세요.
환경
항목
값
OS
Windows 11
컴파일러
MSVC 19.51 (Visual Studio Build Tools 2026)
빌드 시스템
Meson 1.11.2 + Ninja 1.13.0
패키지 매니저
vcpkg, MSYS2(pkg-config 용도)
터미널
x64 Native Tools Command Prompt
참고로 제 PC에는 대학 C++ 수업 때 VS Code에서 컴파일하려고 설정해 둔 MSYS2(UCRT64)가 이미 있었습니다. 시스템 PATH에도 등록되어 있는 상태였는데, 이게 뒤에서 MSVC와 충돌하는 원인이 됐습니다. 같은 상황이신 분들은 트러블슈팅 부분을 먼저 보셔도 좋을 것 같습니다.
왜 MSVC로 갔나
MSYS2가 이미 있어서 MinGW로 빌드하는 방법도 있었지만, MSVC를 선택했습니다.
ThorVG 공식 문서와 meson.build가 MSVC를 전제로 한 분기를 갖고 있습니다
다른 멘티분들과 환경이 겹쳐야 질문과 답변이 통할 것 같았습니다
윈도우 네이티브 빌드라 나중에 디버깅할 때도 유리할 것 같았습니다
결과적으로는 MSYS2가 남아 있던 것 때문에 오히려 더 헤맸지만, 그 과정 자체가 기록으로 남을 만하다고 생각합니다.
1. 컴파일러 설치
윈도우에는 C++ 컴파일러가 기본으로 없어서 먼저 설치해야 합니다.
Visual Studio 다운로드 페이지에서 Build Tools를 받고, 워크로드에서 "C++를 사용한 데스크톱 개발" 하나만 체크하면 됩니다. 약 6.5GB.
Important
설치 후 시작 메뉴에서 "x64 Native Tools Command Prompt" 를 사용하세요.
그냥 "Developer Command Prompt"를 열면 32비트(x86)로 잡힙니다. 이름이 비슷한 게 여러 개 있는데, x64_x86 Cross Tools는 결과물이 32비트라 다릅니다. cl을 쳤을 때 for x64가 나오는지 확인하시면 됩니다.
2. meson, ninja 설치
pip install meson ninja
3. pkg-config 설치
Example 빌드에 pkg-config가 필요한데 윈도우에는 없습니다. MSYS2가 이미 있어서 거기서 받았습니다.
Example이 pkg-config로 thorvg를 찾기 때문에, 빌드만 하지 말고 install까지 해야 합니다. install 과정에서 thorvg-1.pc 파일이 생성되고, pkg-config는 이 파일을 읽어서 헤더와 라이브러리 위치를 알아냅니다.
prefix를 지정하지 않으면 기본값이 C:/ 루트라 C:\include, C:\lib 같은 폴더가 생깁니다.
6. 환경 변수 설정
set PKG_CONFIG_LIBDIR=C:/Users/<사용자명>/dev/install/lib/pkgconfig;C:/Users/<사용자명>/dev/vcpkg/installed/x64-windows/lib/pkgconfig
set PATH=%PATH%;C:\msys64\ucrt64\bin;C:\Users\<사용자명>\dev\install\bin;C:\Users\<사용자명>\dev\vcpkg\installed\x64-windows\bin
__asm__, __builtin_va_list는 GCC 쪽 문법으로 알고 있는데, MSVC가 이걸 해석하지 못해서 나는 에러로 보입니다.
원인은 include 경로였습니다. SDL2의 .pc 파일이 C:/msys64/ucrt64/include를 넘겨주는데, 이 폴더에는 SDL2 헤더뿐 아니라 MinGW의 표준 라이브러리 헤더(stdio.h, math.h 등)도 함께 들어 있습니다. 그래서 MSVC가 자기 stdio.h 대신 MinGW 것을 읽어버렸습니다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Windows 11 + MSVC 환경에서 ThorVG와 ThorVG Example을 빌드했습니다.
공식 README의 빌드 안내는 네 줄 정도로 짧은데, 리눅스/맥 기준이라 윈도우에서는 그 앞뒤로 준비할 게 더 있었습니다. 중간에 네 번 정도 막혔고, 아래는 최종적으로 성공한 경로입니다. 겪은 에러도 같이 적어두었으니 같은 환경이신 분들은 참고해 주세요.
환경
참고로 제 PC에는 대학 C++ 수업 때 VS Code에서 컴파일하려고 설정해 둔 MSYS2(UCRT64)가 이미 있었습니다. 시스템 PATH에도 등록되어 있는 상태였는데, 이게 뒤에서 MSVC와 충돌하는 원인이 됐습니다. 같은 상황이신 분들은 트러블슈팅 부분을 먼저 보셔도 좋을 것 같습니다.
왜 MSVC로 갔나
MSYS2가 이미 있어서 MinGW로 빌드하는 방법도 있었지만, MSVC를 선택했습니다.
meson.build가 MSVC를 전제로 한 분기를 갖고 있습니다결과적으로는 MSYS2가 남아 있던 것 때문에 오히려 더 헤맸지만, 그 과정 자체가 기록으로 남을 만하다고 생각합니다.
1. 컴파일러 설치
윈도우에는 C++ 컴파일러가 기본으로 없어서 먼저 설치해야 합니다.
Visual Studio 다운로드 페이지에서 Build Tools를 받고, 워크로드에서 "C++를 사용한 데스크톱 개발" 하나만 체크하면 됩니다. 약 6.5GB.
Important
설치 후 시작 메뉴에서 "x64 Native Tools Command Prompt" 를 사용하세요.
그냥 "Developer Command Prompt"를 열면 32비트(x86)로 잡힙니다. 이름이 비슷한 게 여러 개 있는데,
x64_x86 Cross Tools는 결과물이 32비트라 다릅니다.cl을 쳤을 때for x64가 나오는지 확인하시면 됩니다.2. meson, ninja 설치
3. pkg-config 설치
Example 빌드에 pkg-config가 필요한데 윈도우에는 없습니다. MSYS2가 이미 있어서 거기서 받았습니다.
# MSYS2 UCRT64 셸에서 pacman -S mingw-w64-ucrt-x86_64-pkgconf실행 파일 위치는
C:\msys64\ucrt64\bin\pkg-config.exe입니다. MSYS2가 없으시면 chocolatey의pkgconfiglite를 쓰셔도 됩니다.4. SDL2 설치 (vcpkg)
:x64-windows는 트리플렛이라고 하는데, "64비트 윈도우용으로 빌드하라"는 지정입니다. 안 붙이면 32비트가 기본이라 또 꼬입니다.Warning
처음에는 MSYS2에서
pacman -S mingw-w64-ucrt-x86_64-SDL2로 받았는데, MSVC와 같이 쓰니 빌드가 깨졌습니다. 아래 트러블슈팅 참고.vcpkg는 소스를 받아서 MSVC로 직접 컴파일해 주기 때문에 이 문제가 없습니다. 설치 로그에도
Compiler found: .../MSVC/.../cl.exe가 찍힙니다.5. ThorVG 빌드 & 설치
Example이 pkg-config로 thorvg를 찾기 때문에, 빌드만 하지 말고
install까지 해야 합니다.install과정에서thorvg-1.pc파일이 생성되고, pkg-config는 이 파일을 읽어서 헤더와 라이브러리 위치를 알아냅니다.prefix를 지정하지 않으면 기본값이
C:/루트라C:\include,C:\lib같은 폴더가 생깁니다.6. 환경 변수 설정
확인:
PATH에
install\bin과 vcpkg의bin을 넣는 이유는, 실행 시점에thorvg-1.dll과SDL2.dll을 찾아야 하기 때문입니다. 컴파일할 때 쓰는.lib와는 별개입니다.매번 치기 번거로워서
.bat파일로 만들어 두고 씁니다.Note
이
.bat은 더블클릭하면 안 되고, x64 Native Tools Command Prompt 안에서 실행해야 합니다.set은 해당 창에서만 유효하기 때문입니다.7. Example 빌드 & 실행
meson setup출력에서 아래 세 줄이 모두 YES면 준비된 것입니다.트러블슈팅
MSYS2 SDL2를 쓰면 표준 헤더에서 에러가 쏟아집니다
MSYS2가 이미 설치되어 있어서 SDL2도
pacman으로 받았는데, 이게 문제였습니다.__asm__,__builtin_va_list는 GCC 쪽 문법으로 알고 있는데, MSVC가 이걸 해석하지 못해서 나는 에러로 보입니다.원인은 include 경로였습니다. SDL2의
.pc파일이C:/msys64/ucrt64/include를 넘겨주는데, 이 폴더에는 SDL2 헤더뿐 아니라 MinGW의 표준 라이브러리 헤더(stdio.h,math.h등)도 함께 들어 있습니다. 그래서 MSVC가 자기stdio.h대신 MinGW 것을 읽어버렸습니다.→ vcpkg로 SDL2를 다시 설치하니 해결됐습니다.
vcpkg로 바꿨는데도 MSYS2 경로가 계속 잡힙니다
PKG_CONFIG_PATH에 vcpkg 경로를 추가했는데도 소용이 없었습니다.예전에 MSYS2를 설치하면서
C:\msys64\ucrt64\bin을 시스템 PATH에 영구 등록해 둔 상태였고, 그래서 pkg-config가 자기 기본 경로에서 MSYS2 쪽.pc를 먼저 찾고 있었습니다.→
PKG_CONFIG_PATH대신PKG_CONFIG_LIBDIR을 썼습니다. 전자는 기본 경로에 추가하는 것이고, 후자는 기본 경로를 아예 대체합니다.thorvg.h를 못 찾습니다
소스는
#include <thorvg-1/thorvg.h>로 찾는데, install로 생성된thorvg-1.pc의 Cflags가 이렇게 되어 있었습니다.이러면 최종 경로가
include/thorvg-1/thorvg-1/thorvg.h가 되어thorvg-1이 두 번 들어갑니다.→
.pc파일을 직접 수정했습니다.C:\Users\<사용자명>\dev\install\lib\pkgconfig\thorvg-1.pc를 메모장으로 열어 마지막 줄만 바꾸고,builddir을 지운 뒤meson setup부터 다시 하면 됩니다.GL 엔진이 꺼져 있습니다
meson setup요약에GL : NO로 나와서, 과제 예시의Animation gl은 실행되지 않았습니다. 기본값인 소프트웨어 렌더링(sw)으로 확인했습니다.실행 결과
Lottie, Svg, Animation 예제 모두 정상 동작을 확인했습니다. SVG 예제의 그라디언트나 클리핑 같은 케이스까지 제대로 렌더링되는 걸 보고 환경이 정상이라고 판단했습니다.
아직 이해하지 못한 부분
thorvg-1.pc의 Cflags 문제가 제 환경 설정 탓인지, 아니면 비표준 경로에 install할 때 공통으로 생기는 문제인지 아직 확실하지 않습니다. 리눅스에서는/usr/include가 기본 검색 경로라 드러나지 않을 것 같은데, 확인해 보려고 합니다.All reactions