[실패] OSRM 실행하기 - 오류 해결

2024. 11. 23. 00:06프로그래밍/GIS

728x90

 

 

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

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

tobee.tistory.com

저번 글에서 다음 명령을 실행 해보니,

./osrm-extract.exe -p /home/User/osrm-backend/profiles/car.lua south-korea-latest.osm.pbf

다음과 같은 오류를 만났습니다.

Unexpected end of file: osrm_fingerprint.meta: Datatype size does not match file size. (at include/storage/tar.hpp:144)

 

너무 이상한 오류라고 생각 해 볼 수도 있겠으나, 해당 소스 코드를 확인 해 보면 다음과 같은 코드로 구성 됩니다.

https://github.com/Project-OSRM/osrm-backend/blob/master/include/storage/tar.hpp

 

osrm-backend/include/storage/tar.hpp at master · Project-OSRM/osrm-backend

Open Source Routing Machine - C++ backend. Contribute to Project-OSRM/osrm-backend development by creating an account on GitHub.

github.com

template <typename T, typename OutIter> void ReadStreaming(const std::string &name, OutIter out)
{
    mtar_header_t header;
    auto ret = mtar_find(&handle, name.c_str(), &header);
    detail::checkMTarError(ret, path, name);

    auto number_of_elements = header.size / sizeof(T);
    auto expected_size = sizeof(T) * number_of_elements;
    if (header.size != expected_size)
    {
        throw util::RuntimeError(name + ": Datatype size does not match file size.",
                                 ErrorCode::UnexpectedEndOfFile,
                                 SOURCE_REF);
    }

뭔지는 모르겠으나, 이 단계를 넘어가보

"Unexpected end of file " 과 아래 코드를 종합해 보면, 뭔가 header 를 읽어 내지 못하는 게 아닐까 하는 생각이 드네요

auto ret = mtar_find(&handle, name.c_str(), &header);

디버그 모드로 빌드 한 이유가 gdb 를 사용하기 위해서니까 gdb를 사용해 보기로 하였습니다.

$ gdb ./osrm-extract
$ (gdb) run -p /home/User/osrm-backend/profiles/car.lua south-korea-latest.osm.pbf

위의 코드는 다음과 같은 오류를 냈습니다.

"Profile /home/User/osrm-backend/profiles/car.lua not found!"

 

결국 윈도우 gcc  환경인 mingw 이므로 경로는 윈도우 경로로 진행 해야 하는 것인가? 하는 의문이 들었습니다.

명령을 윈도우 경로로 바꾸어 진행해 보았습니다.

(gdb) run -p C:\DEV\SDK\msys64\home\User\osrm-backend/profiles\car.lua south-korea-latest.osm.pbf

다음과 같이 그 오류는 넘어 가는 군요...

 

그래서 다음 명령으로 진행해 보기로 했습니다.

set PATH=$PATH:.:

./osrm-extract.exe -p /C/DEV/SDK/msys64/home/User/osrm-backend/profiles/car.lua \
/C/DEV/SDK/msys64/home/User/osrm-backend/install/bin/south-korea-latest.osm.pbf

그 다음 오류가 생기네요...

거의 비슷한 오류네요

[2024-11-22T13:59:55.311945100] [error] Unexpected end of file: /common/names/blocks.meta: Datatype size does not match file size. (at include/storage/tar.hpp:144)

그럼 다시

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

# 기본 경로 설정
export PATH=/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/home/User/osrm-backend/install/bin:$PATH

# 라이브러리 경로 설정
export LIBRARY_PATH=/mingw64/lib:/home/User/osrm-backend/install/lib:$LIBRARY_PATH

# 헤더 경로 설정
export C_INCLUDE_PATH=/mingw64/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/mingw64/include:/home/User/osrm-backend/install/include:$CPLUS_INCLUDE_PATH

# 패키지 구성 파일 경로 설정
export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig:/home/User/osrm-backend/install/lib/pkgconfig:$PKG_CONFIG_PATH
osrm-extract.exe -p /home/User/osrm-backend/profiles/car.lua south-korea-latest.osm.pbf


$ gdb osrm-extract
$ (gdb) run -p C:\DEV\SDK\msys64\home\User\osrm-backend\profiles\car.lua C:\DEV\SDK\msys64\home\User\south-korea-latest.osm.pbf
>> 중단점 설정
$ (gdb) break tar.hpp:ReadStreaming
$ (gdb) break osrm::storage::tar::FileReader::ReadStreaming
728x90