Chat gpt 와 함께 OSRM 빌드해보기 - 디버그모드

2024. 11. 22. 00:32프로그래밍/GIS

728x90

저번 글에서 릴리즈 모드로 빌드를 성공하기는 했으나, 실행 시 오류로 인해서 디버그 모드로 빌드를 진행하다

실패 했습니다.

 

 

Chat gpt 와 함께 OSRM 빌드해보기

오늘은 미뤄왔던 OSRM 빌드하기를 시도해보기로 했습니다. 참고로 OSRM 은 'Open Source Routing Machine' 의 약자입니다.이렇게 물어 봤습니다. 다음 사이트에 있는 https://github.com/Project-OSRM/osrm-backend 

tobee.tistory.com

그래서 오늘도 다시 Chat 선생께 물어보았습니다. 다음과 같이

osrm 을 mingw64 mys2 에서 디버그 모드로 빌드하고 싶어요

위의 질문으로 진행 했던 내용입니다. 다행히 디버그 모드로 빌드를 했습니다 만, 약간 저번글에서 빌드 한 내용과 차이가 좀 있습니다.

 

환경 다시 만들기

다음과 같이 설치를 진행 했습니다.

pacman -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-protobuf mingw-w64-x86_64-libzip git

설치가 끝이 나면 Make 파일을 만들어 보기로 합니다.

 

Make 파일 만들기

설명 대로 다음과 같이 진행해 보았습니다.

cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ..
mingw32-make -j5

그냥 make 로는 좀 느린 것 같아서, 내 PC의 성능을 좀 믿고 동시 사용 수를 좀 늘려서 진행 했습니다.

 

오류 발생

In file included from C:/DEV/SDK/msys64/home/User/osrm-backend/include/extractor/extraction_helper_functions.hpp:15,
                 from C:/DEV/SDK/msys64/home/User/osrm-backend/src/extractor/scripting_environment_lua.cpp:3:
C:/DEV/SDK/msys64/home/User/osrm-backend/include/guidance/parsing_toolkit.hpp: In function 'std::string osrm::extractor::guidance::trimLaneString(sttring, int32_t, int32_t)':
C:/DEV/SDK/msys64/home/User/osrm-backend/include/guidance/parsing_toolkit.hpp:28: note: '-Wmisleading-indentation' is disabled from this point onwarsince column-tracking was disabled due to the size of the code/headers
   28 |         for (std::int32_t i = 0; i < count_left; ++i)
C:/DEV/SDK/msys64/home/User/osrm-backend/include/guidance/parsing_toolkit.hpp:28: note: adding '-flarge-source-files' will allow for more column-trag support, at the expense of compilation time and memory
[ 91%] Linking CXX executable osrm-datastore.exe
[ 91%] Built target osrm-datastore
C:/DEV/SDK/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/as.exe: CMakeFiles/EXTRACTOR.dir/src/extractoripting_environment_lua.cpp.obj: too many sections (94193)
C:\DEV\SDK\msys64\tmp\ccDVZ6v5.s: Assembler messages:
C:\DEV\SDK\msys64\tmp\ccDVZ6v5.s: Fatal error: can't write 6 bytes to section .text of CMakeFiles/EXTRACTOR.dir/src/extractor/scripting_environment_cpp.obj: 'file too big'
C:/DEV/SDK/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/as.exe: CMakeFiles/EXTRACTOR.dir/src/extractoripting_environment_lua.cpp.obj: too many sections (94193)
C:\DEV\SDK\msys64\tmp\ccDVZ6v5.s: Fatal error: CMakeFiles/EXTRACTOR.dir/src/extractor/scripting_environment_lua.cpp.obj: file too big
make[2]: *** [CMakeFiles/EXTRACTOR.dir/build.make:331: CMakeFiles/EXTRACTOR.dir/src/extractor/scripting_environment_lua.cpp.obj] Error 1
make[1]: *** [CMakeFiles/Makefile2:284: CMakeFiles/EXTRACTOR.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

키워드가 'file too big' 이 아닐까 하는 생각으로 검색을 해보니, 다음과 같이 쓰라고 하더군요.

물론 물어보니 거의 비슷 하였습니다.

다음 명령으로 진행 하였습니다.

cmake -G "MinGW Makefiles" -DCMAKE_CXX_FLAGS="-Wa,-mbig-obj" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ..
mingw32-make -j5
mingw32-make install

 

중간 중간에 waring 메시지가 보이길래,

In file included from C:/DEV/SDK/msys64/home/User/osrm-backend/include/extractor/extraction_helper_functions.hpp:15,
                 from C:\DEV\SDK\msys64\home\User\osrm-backend\src\extractor\scripting_environment_lua.cpp:3:
C:/DEV/SDK/msys64/home/User/osrm-backend/include/guidance/parsing_toolkit.hpp: In function 'std::string osrm::extractor::guidance::trimLaneString(std::string, int32_t, int32_t)':
C:/DEV/SDK/msys64/home/User/osrm-backend/include/guidance/parsing_toolkit.hpp:28: note: '-Wmisleading-indentation' is disabled from this point onwards, since column-tracking was disabled due to the size of the code/headers
   28 |         for (std::int32_t i = 0; i < count_left; ++i)
C:/DEV/SDK/msys64/home/User/osrm-backend/include/guidance/parsing_toolkit.hpp:28: note: adding '-flarge-source-files' will allow for more column-tracking support, at the expense of compilation time and memory

다시 다음과 같이 Cmake 를 주고서 진행을 해 보았습니다.

cmake -G "MinGW Makefiles" \
-DCMAKE_CXX_FLAGS="-Wa,-mbig-obj -Wmisleading-indentation -flarge-source-files" \
-DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ..
mingw32-make -j5
mingw32-make install

 

테스트 해보기

그럼 뭐... 다시 첫 번째 글에서 테스트 한 내용을 다시 테스트 해보기 하겠습니다.

install/bin 으로 파일을 복사 한 후, 문제의 명령을 실행 해 보았습니다.

파일 사이즈가 작은 것을 먼저 해 보았다는 거죠

osrm-extract.exe -p ..\profiles\car.lua seoul-non-military.osm.pbf

뭔가 알송달송한 오류가 나네요...

[2024-11-21T15:00:50.052957800] [error] Unexpected end of file: /common/names/blocks.meta: 
Datatype size does not match file size. (at include/storage/tar.hpp:144)

뭔가 압축 파일이다라는 느낌이 들기는 하지만, 이게 오류 인건지는 확인이 안되네요.

다른 파일로 하면 될까 싶지만, 그래도 한 번 큰 파일을 사용해 보았습니다.

osrm-extract.exe -p ..\..\profiles\car.lua south-korea-latest.osm.pbf

다음은 실패한 명령 입니다.

rm -rf *.osrm* common/names/*
 ./osrm-extract.exe -p /home/User/osrm-backend/profiles/car.lua seoul-non-military.osm.pbf
rm -rf *.osrm* common/names/*
 ./osrm-extract.exe -p /home/User/osrm-backend/install/share/osrm/profiles/car.lua seoul-non-military.osm.pbf
rm -rf *.osrm* common/names/*
 ./osrm-extract.exe -p /home/User/osrm-backend/install/share/osrm/profiles/lib/profile_debugger.lua seoul-non-military.osm.pbf
rm -rf *.osrm* common/names/*
osrm-extract.exe -p ..\..\profiles\car.lua south-korea-latest.osm.pbf
osrm-extract -p C:\DEV\SDK\msys64\home\User\osrm-backend\profiles\car.lua south-korea-latest.osm.pbf
osrm-extract -p C:\DEV\SDK\msys64\home\User\osrm-backend\install\share\osrm\profiles\lib\profile_debugger.lua south-korea-latest.osm.pbf
osrm-extract -p (cygpath -u "C:\DEV\SDK\msys64\home\User\osrm-backend\install\share\osrm\profiles\lib\profile_debugger.lua") south-korea-latest.osm.pbf
728x90