简体   繁体   中英

libvalhalla cmake link static library Android

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM