From 96cc1cf088fd4f02c855e6eaaad6b98225137507 Mon Sep 17 00:00:00 2001 From: Matt Bhagat-Conway Date: Mon, 17 Jun 2024 17:00:48 -0400 Subject: [PATCH 1/3] link libosrm_guidance correctly and work around circular dependencies between guidance and extract, fixes #6954 --- CMakeLists.txt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1876d6b85..cb0df27d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -566,7 +566,17 @@ set(UTIL_LIBRARIES target_link_libraries(osrm ${ENGINE_LIBRARIES}) target_link_libraries(osrm_update ${UPDATER_LIBRARIES}) target_link_libraries(osrm_contract ${CONTRACTOR_LIBRARIES} osrm_update osrm_store) -target_link_libraries(osrm_extract osrm_guidance ${EXTRACTOR_LIBRARIES}) + +# There is a circular dependency between osrm_extract and osrm_guidance. Tell the linker to trust us +# that the two osrm::guidance functions used in osrm_extract will be available at runtime. +# We don't need to do this for osrm_guidance, as osrm_extract will already be built when that gets +# built and symbols can be looked up in osrm_extract directly. +# https://stackoverflow.com/questions/25421479/ +target_link_libraries(osrm_extract + "-Wl,-U,__ZN4osrm8guidance13annotateTurnsERKNS_4util12DynamicGraphINS1_17NodeBasedEdgeDataEEERKNS_9extractor6detail30EdgeBasedNodeDataContainerImplILNS_7storage9OwnershipE0EEERKNSt3__16vectorINS1_10CoordinateENSF_9allocatorISH_EEEERKNS7_23CompressedEdgeContainerERKNSF_13unordered_setIjNSF_4hashIjEENSF_8equal_toIjEENSI_IjEEEERKNS7_18NodeRestrictionMapINS7_17UnconditionalOnlyEEERKNS7_17WayRestrictionMapERKNS8_13NameTableImplILSB_0EEERKNS7_11SuffixTableERKNSF_5tupleIJNSG_IjSV_EENSG_ItNSI_ItEEEEEEERNS1_15ConcurrentIDMapIS1H_tNSR_IS1H_EEEERNS1L_INS1_8guidance15LaneTupleIdPairEtNSR_IS1Q_EEEERNS0_6detail21TurnDataContainerImplILSB_2EEERS1F_RNS1L_INS1P_12BearingClassEjNSR_IS1Z_EEEERNS1L_INS1P_10EntryClassEtNSR_IS23_EEEERj" + "-Wl,-U,__ZN4osrm8guidance19findSegregatedNodesERKNS_9extractor21NodeBasedGraphFactoryERKNS1_6detail13NameTableImplILNS_7storage9OwnershipE0EEE" + ${EXTRACTOR_LIBRARIES}) +target_link_libraries(osrm_guidance ${GUIDANCE_LIBRARIES} osrm_extract) target_link_libraries(osrm_partition ${PARTITIONER_LIBRARIES}) target_link_libraries(osrm_customize ${CUSTOMIZER_LIBRARIES} osrm_update osrm_store) target_link_libraries(osrm_store ${STORAGE_LIBRARIES}) From 7745907a13434892260c5c25f40de7beb265f902 Mon Sep 17 00:00:00 2001 From: Matt Bhagat-Conway Date: Mon, 17 Jun 2024 17:22:15 -0400 Subject: [PATCH 2/3] changelog entry for #6955 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87627e0c9..4b1097d26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - ADDED: Add support for opposite approach request parameter. [#6842](https://github.com/Project-OSRM/osrm-backend/pull/6842) - ADDED: Add support for accessing edge flags in `process_segment` [#6658](https://github.com/Project-OSRM/osrm-backend/pull/6658) - Build: + - FIXED: Avoid undefined symbol errors when building shared libraries on macOS [#6955](https://github.com/Project-OSRM/osrm-backend/6955) - CHANGED: Upgrade clang-format to version 15. [#6919](https://github.com/Project-OSRM/osrm-backend/pull/6919) - CHANGED: Use Debian Bookworm as base Docker image [#6904](https://github.com/Project-OSRM/osrm-backend/pull/6904) - CHANGED: Upgrade CI actions to latest versions [#6893](https://github.com/Project-OSRM/osrm-backend/pull/6893) From 4783b9133548d961e0905779e26912b4cf9041f7 Mon Sep 17 00:00:00 2001 From: Matt Bhagat-Conway Date: Tue, 18 Jun 2024 08:58:50 -0400 Subject: [PATCH 3/3] link osrm-extract to osrm_guidance when using dynamic libraries --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb0df27d6..7692d06c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -490,7 +490,7 @@ set(BOOST_ENGINE_LIBRARIES # Binaries target_link_libraries(osrm-datastore osrm_store ${Boost_PROGRAM_OPTIONS_LIBRARY}) -target_link_libraries(osrm-extract osrm_extract ${Boost_PROGRAM_OPTIONS_LIBRARY}) +target_link_libraries(osrm-extract osrm_extract osrm_guidance ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_link_libraries(osrm-partition osrm_partition ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_link_libraries(osrm-customize osrm_customize ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_link_libraries(osrm-contract osrm_contract ${Boost_PROGRAM_OPTIONS_LIBRARY})