Directory pic:
This is how I compile protobuf
:
export NDK=~/Android/Sdk/ndk/23.1.7779620
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export TARGET=x86_64-linux-android
export API=26
export AR=$TOOLCHAIN/bin/llvm-ar
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export AS=$CC
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip
export LDFLAGS="-llog -fPIC"
export CXXFLAGS="-fPIC"
../protobuf-3.19.0/configure --host $TARGET --disable-shared --with-pic
make -j$(nproc)
This is how I compile valhalla
:
export PROTOBUF_INSTALL_DIR=/opt/protobuf
export PROTOBUF_HEADERS=$PROTOBUF_INSTALL_DIR/include
export PROTOC=$PROTOBUF_INSTALL_DIR/bin/protoc
export PROTOBUF_LIB=../protobuf_android/src/.libs # static libs that got generated from previous build script
export NDK=~/Android/Sdk/ndk/23.1.7779620
export TOOLCHAIN=$NDK/build/cmake/android.toolchain.cmake
cmake ../valhalla \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_PLATFORM="android-26" \
-DANDROID_ABI="x86_64" \
-DANDROID_NDK="$NDK" \
-DANDROID_TOOLCHAIN=clang++ \
-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN" \
-DENABLE_PYTHON_BINDINGS=Off \
-DProtobuf_PROTOC_EXECUTABLE=$PROTOC \
-DProtobuf_INCLUDE_DIR=$PROTOBUF_HEADERS \
-DProtobuf_LIBRARY_RELEASE=$PROTOBUF_LIB \
-DENABLE_TOOLS=Off \
-DENABLE_HTTP=Off \
-DENABLE_SERVICES=Off \
-DENABLE_DATA_TOOLS=Off \
-DENABLE_STATIC_LIBRARY_MODULES=On \
-DBUILD_SHARED_LIBS=Off \
-DBoost_INCLUDE_DIR=${HOME}/Documents/routing/boost-1.77.0/
make -j$(nproc)
And the CMakeLists.txt
cmake_minimum_required(VERSION 3.12.1)
project( react-native )
set( CMAKE_CXX_STANDARD 14 )
set( SOURCE_FILES native-lib.cpp )
set( INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include )
set( ANDROID_ABI_LIBS ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI} )
include_directories( ${INCLUDE_DIR} )
# Add source files
add_library( react-native SHARED ${SOURCE_FILES} )
# libvalhalla import
add_library( libvalhalla STATIC IMPORTED )
set_target_properties( libvalhalla PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla.a )
# valhalla-baldr
add_library( valhalla-baldr STATIC IMPORTED )
set_target_properties( valhalla-baldr PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-baldr.a )
# valhalla-loki
add_library( valhalla-loki STATIC IMPORTED )
set_target_properties( valhalla-loki PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-loki.a )
# valhalla-meili
add_library( valhalla-meili STATIC IMPORTED )
set_target_properties( valhalla-meili PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-meili.a )
# valhalla-midgard
add_library( valhalla-midgard STATIC IMPORTED )
set_target_properties( valhalla-midgard PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-midgard.a )
# valhalla-odin
add_library( valhalla-odin STATIC IMPORTED )
set_target_properties( valhalla-odin PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-odin.a )
# valhalla-sif
add_library( valhalla-sif STATIC IMPORTED )
set_target_properties( valhalla-sif PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-sif.a )
# valhalla-skadi
add_library( valhalla-skadi STATIC IMPORTED )
set_target_properties( valhalla-skadi PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-skadi.a )
# valhalla-tyr
add_library( valhalla-tyr STATIC IMPORTED )
set_target_properties( valhalla-tyr PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-tyr.a )
# libprotobuf
add_library( libprotobuf STATIC IMPORTED )
set_target_properties( libprotobuf PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libprotobuf.a )
# libvalhalla-proto
add_library( libvalhalla-proto STATIC IMPORTED )
set_target_properties( libvalhalla-proto PROPERTIES IMPORTED_LOCATION
${ANDROID_ABI_LIBS}/libvalhalla-proto.a )
file (GLOB_RECURSE Foo_HEADERS CONFIGURE_DEPENDS "src/*.h")
set (Foo_INCLUDE_DIRS "")
foreach (_headerFile ${Foo_HEADERS})
get_filename_component(_dir ${_headerFile} PATH)
list (APPEND Foo_INCLUDE_DIRS ${_dir})
endforeach()
list (REMOVE_DUPLICATES Foo_INCLUDE_DIRS)
message("${Foo_INCLUDE_DIRS}")
# Combine all targets into react-native
target_include_directories( react-native PRIVATE
${ANDROID_ABI_LIBS}/valhalla
${ANDROID_ABI_LIBS}/valhalla/proto
${ANDROID_ABI_LIBS}/google/protobuf
${Foo_INCLUDE_DIRS}
logger )
find_library( log-lib log android )
target_link_libraries( react-native
libvalhalla
valhalla-baldr
valhalla-meili
valhalla-odin
valhalla-sif
valhalla-skadi
valhalla-tyr
valhalla-midgard
libprotobuf
libvalhalla-proto
log
${log-lib}
android )
Stackrace Android Studio:
Build command failed.
Error while executing process /usr/bin/ninja with arguments {-v -C ~/AndroidStudioProjects/ValhallaTest2/app/.cxx/Release/4g625852/x86_64 react-native}
ninja: Entering directory `~/AndroidStudioProjects/ValhallaTest2/app/.cxx/Release/4g625852/x86_64'
[0/2] /usr/bin/cmake -P ~/AndroidStudioProjects/ValhallaTest2/app/.cxx/Release/4g625852/x86_64/CMakeFiles/VerifyGlobs.cmake
[1/1] : && ~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=x86_64-none-linux-android26 --gcc-toolchain=~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++17 --target=x86_64-linux-android29 -O2 -DNDEBUG -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libreact-native.so -o ~/AndroidStudioProjects/ValhallaTest2/app/build/intermediates/cxx/Release/4g625852/obj/x86_64/libreact-native.so CMakeFiles/react-native.dir/native-lib.cpp.o lib/x86_64/libvalhalla.a lib/x86_64/libvalhalla-baldr.a lib/x86_64/libvalhalla-meili.a lib/x86_64/libvalhalla-odin.a lib/x86_64/libvalhalla-sif.a lib/x86_64/libvalhalla-skadi.a lib/x86_64/libvalhalla-tyr.a lib/x86_64/libvalhalla-midgard.a lib/x86_64/libprotobuf.a lib/x86_64/libvalhalla-proto.a -llog ~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/26/liblog.so -landroid -latomic -lm && :
FAILED: ~/AndroidStudioProjects/ValhallaTest2/app/build/intermediates/cxx/Release/4g625852/obj/x86_64/libreact-native.so
: && ~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=x86_64-none-linux-android26 --gcc-toolchain=~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++17 --target=x86_64-linux-android29 -O2 -DNDEBUG -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libreact-native.so -o ~/AndroidStudioProjects/ValhallaTest2/app/build/intermediates/cxx/Release/4g625852/obj/x86_64/libreact-native.so CMakeFiles/react-native.dir/native-lib.cpp.o lib/x86_64/libvalhalla.a lib/x86_64/libvalhalla-baldr.a lib/x86_64/libvalhalla-meili.a lib/x86_64/libvalhalla-odin.a lib/x86_64/libvalhalla-sif.a lib/x86_64/libvalhalla-skadi.a lib/x86_64/libvalhalla-tyr.a lib/x86_64/libvalhalla-midgard.a lib/x86_64/libprotobuf.a lib/x86_64/libvalhalla-proto.a -llog ~/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/26/liblog.so -landroid -latomic -lm && :
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&): error: undefined reference to 'valhalla::baldr::GraphReader::GraphReader(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, std::__ndk1::unique_ptr<valhalla::baldr::tile_getter_t, std::__ndk1::default_delete<valhalla::baldr::tile_getter_t> >&&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&): error: undefined reference to 'valhalla::loki::loki_worker_t::loki_worker_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, std::__ndk1::shared_ptr<valhalla::baldr::GraphReader> const&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&): error: undefined reference to 'valhalla::thor::thor_worker_t::thor_worker_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, std::__ndk1::shared_ptr<valhalla::baldr::GraphReader> const&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&): error: undefined reference to 'valhalla::odin::odin_worker_t::odin_worker_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&): error: undefined reference to 'valhalla::thor::thor_worker_t::~thor_worker_t()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function _ZNSt6__ndk110shared_ptrIN8valhalla3tyr7actor_t7pimpl_tEEC2IS4_EEPT_NS_9enable_ifIXsr14is_convertibleIS8_PS4_EE5valueENS5_5__natEE4typeE: error: undefined reference to 'valhalla::odin::odin_worker_t::~odin_worker_t()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function _ZNSt6__ndk110shared_ptrIN8valhalla3tyr7actor_t7pimpl_tEEC2IS4_EEPT_NS_9enable_ifIXsr14is_convertibleIS8_PS4_EE5valueENS5_5__natEE4typeE: error: undefined reference to 'valhalla::thor::thor_worker_t::~thor_worker_t()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, valhalla::baldr::GraphReader&): error: undefined reference to 'valhalla::loki::loki_worker_t::loki_worker_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, std::__ndk1::shared_ptr<valhalla::baldr::GraphReader> const&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, valhalla::baldr::GraphReader&): error: undefined reference to 'valhalla::thor::thor_worker_t::thor_worker_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, std::__ndk1::shared_ptr<valhalla::baldr::GraphReader> const&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, valhalla::baldr::GraphReader&): error: undefined reference to 'valhalla::odin::odin_worker_t::odin_worker_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::pimpl_t::pimpl_t(boost::property_tree::basic_ptree<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > > const&, valhalla::baldr::GraphReader&): error: undefined reference to 'valhalla::thor::thor_worker_t::~thor_worker_t()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::cleanup(): error: undefined reference to 'valhalla::loki::loki_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::cleanup(): error: undefined reference to 'valhalla::thor::thor_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::cleanup(): error: undefined reference to 'valhalla::service_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::service_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::ParseApi(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, valhalla::Options_Action, valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::route(valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::route(valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::odin::odin_worker_t::narrate(valhalla::Api&) const'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::service_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::service_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::ParseApi(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, valhalla::Options_Action, valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::locate(valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::locate(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::service_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::service_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::ParseApi(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, valhalla::Options_Action, valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::matrix(valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::matrix(valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::matrix(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::service_worker_t::cleanup()'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::optimized_route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::optimized_route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::optimized_route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::service_worker_t::set_interrupt(std::__ndk1::function<void ()> const*)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::optimized_route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::ParseApi(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, valhalla::Options_Action, valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::optimized_route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::loki::loki_worker_t::matrix(valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::optimized_route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::thor::thor_worker_t::optimized_route(valhalla::Api&)'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::optimized_route(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::function<void ()> const*, valhalla::Api*): error: undefined reference to 'valhalla::odin::odin_worker_t::narrate(valhalla::Api&) const'
lib/x86_64/libvalhalla-tyr.a(actor.cc.o):actor.cc:function valhalla::tyr::actor_t::isochrone(std::__ndk1::basic_string<char,
...
...
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
I know it has to with linking dependencies but I don't know how to fix it, I've been trying to fix this for weeks now but with no success.
From your build output it seems that some of the valhalla
libraries depend on each other, and those dependencies are not reflected in your CMakeLists.txt
. For example, the Tyr library seems to depend at least on the Baldr, Loki, Thor and Odin libraries (as can be seen from the names of the undefined symbols you get). To reflect this dependency you should add something like this to your CMakeLists.txt
file:
target_link_libraries(valhalla-tyr PUBLIC
valhalla-baldr
valhalla-loki
valhalla-thor
valhalla-odin
)
If after applying this you get undefined symbols from other libraries you should also add similar dependencies for other Valhalla libraries.
As an effect of this, the linker will be passed a slightly different set of arguments, with some libraries possibly listed more than once or in a different order. This will help the linker find the missing symbols.
Another possible solution is to enclose Valhalla libraries within --start-group/--end-group
arguments in your last target_link_libraries
statement. This solution would be more compiler-dependent but if this CMakeLists file is only intended to be used for Android this might be fine:
target_link_libraries( react-native
-Wl,--start-group
libvalhalla
valhalla-baldr
# other valhalla libraries
-Wl,--end-group
# ...
)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.