[Windows 환경] MSYS2, Clang64 및 Visual Studio Code 사용

2024. 11. 24. 00:46프로그래밍

728x90

 

 

OSRM 실행하기 - 오류 해결

Chat gpt 와 함께 OSRM 빌드해보기 - 디버그모드저번 글에서 릴리즈 모드로 빌드를 성공하기는 했으나, 실행 시 오류로 인해서 디버그 모드로 빌드를 진행하다실패 했습니다.  Chat gpt 와 함께 OSRM

tobee.tistory.com

저번 글에서 빌드는 성공 하였으나, 결국 실행에는 실패 하였습니다.

그래서  GUI 상에서 디버깅을 해보는 방법을 어떨까 하는 생각이 들어서 시작해 보았습니다.

우선 실패 하였으나, clang 환경에서 우선 빌드를 다음과 같이 진행 하였습니다.

msys2 를 설치하고, 패키지를 업데이트 합니다. 그리고 다음과 같이 환경 설정 하였습니다.

clang64.exe 에서 작업 하였습니다.

pacman -S \
    mingw-w64-clang-x86_64-cmake mingw-w64-clang-x86_64-gcc mingw-w64-clang-x86_64-clang mingw-w64-clang-x86_64-cmake \
    mingw-w64-clang-x86_64-make mingw-w64-clang-x86_64-toolchain base-devel git

pacman -S \
    mingw-w64-clang-x86_64-boost mingw-w64-clang-x86_64-protobuf mingw-w64-clang-x86_64-lua \
    mingw-w64-clang-x86_64-tbb mingw-w64-clang-x86_64-libzip mingw-w64-clang-x86_64-gdb

 

릴리즈 모드 작업

릴리즈 모드의 작업은 다음과 같이 하였습니다.

rm -Rf *
export SDK_PATH="C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64" 
cmake -G "MinGW Makefiles" \
  -DCMAKE_CXX_FLAGS="-DTOBEE" \
  -DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS} -lws2_32 -lmswsock" \
  -DDOXYGEN_EXECUTABLE=OFF \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_SYSTEM_NAME=Windows \
  -DBOOST_INCLUDEDIR=/C/DEV/SDK/msys64/clang64/include/boost \
  -DBOOST_LIBRARYDIR=/C/DEV/SDK/msys64/clang64/lib \
  -DTBB_DIR=/C/DEV/SDK/msys64/clang64/lib/cmake/TBB \
  -DTBB_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include\tbb \
  -DLUA_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include \
  -DLUA_LIBRARIES=/C/DEV\SDK/msys64/clang64/lib/liblua.a \
  -DCMAKE_INSTALL_PREFIX=/C/DEV/GIS/OSRM/Backend_Exec/Release \
  ..
mingw32-make -j5
mingw32-make install

 

전처리기로 TOBEE 가 있는 데, 해결 할 수가 없어서 그냥 소스를 2개 건드렸습니다. 잘 알지도 못하는 내용이라 그냥 넘어가겠습니다...

다운로드
다운로드

 

여전히 나는 오류 메시지를 함 봐 줍니다..

 

디버그 모드에 대한 작업.

rm -Rf *
export SDK_PATH="C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64" 
cmake -G "MinGW Makefiles" \
  -DCMAKE_CXX_FLAGS="-g -Wa,-mbig-obj -Wmisleading-indentation -flarge-source-files -DTOBEE" \
  -DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS} -lws2_32 -lmswsock" \
  -DDOXYGEN_EXECUTABLE=OFF \
  -DCMAKE_BUILD_TYPE=Debug \
  -DCMAKE_SYSTEM_NAME=Windows \
  -DBOOST_INCLUDEDIR=/C/DEV/SDK/msys64/clang64/include/boost \
  -DBOOST_LIBRARYDIR=/C/DEV/SDK/msys64/clang64/lib \
  -DTBB_DIR=/C/DEV/SDK/msys64/clang64/lib/cmake/TBB \
  -DTBB_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include\tbb \
  -DLUA_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include \
  -DLUA_LIBRARIES=/C/DEV\SDK/msys64/clang64/lib/liblua.a \
  -DCMAKE_INSTALL_PREFIX=/C/DEV/GIS/OSRM/Backend_Exec/Debug \
  ..
mingw32-make -j5
mingw32-make install

 

전처리기로 TOBEE 얘기는 했고..

다음과 같은 오류가 디버그 모드 빌드 시에 발생 했습니다.

C:/DEV/GIS/OSRM/osrm-backend/include/extractor/extraction_helper_functions.hpp:41:73: error: top-level comma expression in array
      subscript is deprecated in C++20 and unsupported in C++23 [-Werror,-Wdeprecated-comma-subscript]
   41 |         hh = uint2_p[_pass = bind([](unsigned x) { return x < 24; }, _1), _val = _1];
      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~

 

여전히 나는 오류 메시지를 함 봐 줍니다..

 

비주얼 소스코드 설치

Visual souce code 사이트에서 설치 해 줍니다.

https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

C/C++ 확장 설치

그림파일을 함 봐주면 되겠습니다.

CMake 확장도 설치 해 준답니다. 그림 한 번 더 보고...

 

osrm 프로젝트를 열어 줍니다.

 

task.json, launch.json 파일 생성 및 작성

그러면 위에서 빌드한 내용을 비주얼 소스 코드에서 사용하기 위해서 ask.json, launch.json  파일을 작성해야 한다고 합니다.

task.json - 릴리즈 빌드의 경우

{
	"version": "2.0.0",
	"tasks": [
	  {
		"label": "CMake Build",
		"type": "shell",
		"command": "cmake",
		"args": [
		  "-G", "MinGW Makefiles",
		  "-DCMAKE_CXX_FLAGS=-DTOBEE",
		  "-DCMAKE_EXE_LINKER_FLAGS=-lws2_32 -lmswsock",
		  "-DDOXYGEN_EXECUTABLE=OFF",
		  "-DCMAKE_BUILD_TYPE=Release",
		  "-DCMAKE_SYSTEM_NAME=Windows",
		  "-DBOOST_INCLUDEDIR=/C/DEV/SDK/msys64/clang64/include/boost",
		  "-DBOOST_LIBRARYDIR=/C/DEV/SDK/msys64/clang64/lib",
		  "-DTBB_DIR=/C/DEV/SDK/msys64/clang64/lib/cmake/TBB",
		  "-DTBB_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include/tbb",
		  "-DLUA_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include",
		  "-DLUA_LIBRARIES=/C/DEV/SDK/msys64/clang64/lib/liblua.a",
		  "-DCMAKE_INSTALL_PREFIX=/C/DEV/GIS/OSRM/Backend_Exec/Release",
		  ".."
		],
		"group": {
		  "kind": "build",
		  "isDefault": true
		},
		"problemMatcher": []
	  },
	  {
		"label": "Make Build",
		"type": "shell",
		"command": "make",
		"args": [-j5],
		"group": {
		  "kind": "build",
		  "isDefault": false
		},
		"problemMatcher": []
	  }
	]
  }

task.json - 디버그 빌드의 경우

{
	"version": "2.0.0",
	"tasks": [
	  {
		"label": "CMake Build",
		"type": "shell",
		"command": "cmake",
		"args": [
		  "-G", "MinGW Makefiles",
		  "-DCMAKE_CXX_FLAGS=-g -Wa,-mbig-obj -Wmisleading-indentation -DTOBEE",
		  "-DCMAKE_EXE_LINKER_FLAGS=-lws2_32 -lmswsock",
		  "-DDOXYGEN_EXECUTABLE=OFF",
		  "-DCMAKE_BUILD_TYPE=Debug",
		  "-DCMAKE_SYSTEM_NAME=Windows",
		  "-DBOOST_INCLUDEDIR=/C/DEV/SDK/msys64/clang64/include/boost",
		  "-DBOOST_LIBRARYDIR=/C/DEV/SDK/msys64/clang64/lib",
		  "-DTBB_DIR=/C/DEV/SDK/msys64/clang64/lib/cmake/TBB",
		  "-DTBB_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include/tbb",
		  "-DLUA_INCLUDE_DIR=/C/DEV/SDK/msys64/clang64/include",
		  "-DLUA_LIBRARIES=/C/DEV/SDK/msys64/clang64/lib/liblua.a",
		  "-DCMAKE_INSTALL_PREFIX=/C/DEV/GIS/OSRM/Backend_Exec/Debug",
		  ".."
		],
		"group": {
		  "kind": "build",
		  "isDefault": true
		},
		"problemMatcher": []
	  },
	  {
		"label": "Make Build",
		"type": "shell",
		"command": "make",
		"args": [],
		"group": {
		  "kind": "build",
		  "isDefault": false
		},
		"problemMatcher": []
	  }
	]
  }

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug OSRM",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/main",  // 빌드된 실행 파일 경로
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,  // 디버깅 시 콘솔을 별도로 열기
      "MIMode": "gdb",  // GDB 디버거 사용
      "miDebuggerPath": "C:/DEV/SDK/msys64/clang64/bin/gdb.exe",  // MSYS2의 GDB 경로 설정
      "preLaunchTask": "build",  // 디버깅 전에 빌드 작업을 실행
      "miDebuggerArgs": "-q",  // GDB 인수
      "logging": {
        "moduleLoad": false,
        "programOutput": true,
        "engineLogging": false
      }
    }
  ]
}

위 처럼 해 준 뒤에, 전역으로 환경설정을 잡아주기 싫어서 다음과 같이 쉘을 만들어서 다시 실행 했습니다.

SET MSYS2_PATH=C:\DEV\SDK\msys64
SET CLANG_PATH=%MSYS2_PATH%\clang64
SET PATH=%CLANG_PATH%\BIN;%PATH%;.

call "C:\DEV\IDE\Microsoft VS Code\Code.exe"

그러고 나면 뭔가 비슷한 것이 나오긴 했는 데...

728x90