0

I experience the same error as has been described here: Android NDK make. Hundreds of "undefined reference error"s

However, after we use the solution we get another type of error:

/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/stdexcept:136: error: undefined reference to 'std::logic_error::logic_error(char const*)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:302: error: undefined reference to 'std::__ndk1::locale::~locale()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:302: error: undefined reference to 'std::__ndk1::locale::~locale()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:683: error: undefined reference to 'std::__ndk1::ios_base::~ios_base()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:683: error: undefined reference to 'std::__ndk1::ios_base::~ios_base()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/stdexcept:136: error: undefined reference to 'std::logic_error::logic_error(char const*)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:302: error: undefined reference to 'std::__ndk1::locale::~locale()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:302: error: undefined reference to 'std::__ndk1::locale::~locale()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:683: error: undefined reference to 'std::__ndk1::ios_base::~ios_base()'
../../../../src/main/jniLibs/armeabi-v7a/libcaffe2.a(Device.cpp.o):Device.cpp:function virtual thunk to std::__ndk1::basic_ostringstream<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::~basic_ostringstream(): error: undefined reference to 'std::__ndk1::ios_base::~ios_base()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:529: error: undefined reference to 'std::__ndk1::ios_base::clear(unsigned int)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:529: error: undefined reference to 'std::__ndk1::ios_base::clear(unsigned int)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ostream:955: error: undefined reference to 'std::__ndk1::ios_base::__set_badbit_and_consider_rethrow()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ostream:461: error: undefined reference to 'std::__ndk1::ios_base::getloc() const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__locale:212: error: undefined reference to 'std::__ndk1::locale::use_facet(std::__ndk1::locale::id&) const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:756: error: undefined reference to 'std::__ndk1::ios_base::getloc() const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__locale:212: error: undefined reference to 'std::__ndk1::locale::use_facet(std::__ndk1::locale::id&) const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:529: error: undefined reference to 'std::__ndk1::ios_base::clear(unsigned int)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ostream:472: error: undefined reference to 'std::__ndk1::ios_base::__set_badbit_and_consider_rethrow()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ostream:461: error: undefined reference to 'std::__ndk1::num_put<char, std::__ndk1::ostreambuf_iterator<char, std::__ndk1::char_traits<char> > >::id'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ostream:461: error: undefined reference to 'std::__ndk1::ctype<char>::id'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/istream:321: error: undefined reference to 'std::__ndk1::ios_base::getloc() const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__locale:212: error: undefined reference to 'std::__ndk1::locale::use_facet(std::__ndk1::locale::id&) const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:529: error: undefined reference to 'std::__ndk1::ios_base::clear(unsigned int)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:193: error: undefined reference to 'std::__ndk1::ctype<char>::id'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/istream:713: error: undefined reference to 'std::__ndk1::ios_base::getloc() const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__locale:212: error: undefined reference to 'std::__ndk1::locale::use_facet(std::__ndk1::locale::id&) const'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/istream:732: error: undefined reference to 'std::__ndk1::ios_base::__set_badbit_and_consider_rethrow()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/istream:730: error: undefined reference to 'std::__ndk1::num_get<char, std::__ndk1::istreambuf_iterator<char, std::__ndk1::char_traits<char> > >::id'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ostream:739: error: undefined reference to 'std::__ndk1::ios_base::__set_badbit_and_consider_rethrow()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ostream:737: error: undefined reference to 'std::__ndk1::ctype<char>::id'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:690: error: undefined reference to 'std::__ndk1::ios_base::init(void*)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:311: error: undefined reference to 'std::__ndk1::locale::locale()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:690: error: undefined reference to 'std::__ndk1::ios_base::init(void*)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:311: error: undefined reference to 'std::__ndk1::locale::locale()'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/stdexcept:146: error: undefined reference to 'std::logic_error::logic_error(char const*)'
../../../../src/main/jniLibs/armeabi-v7a/libcaffe2.a(Device.cpp.o):Device.cpp:typeinfo for std::__ndk1::basic_ios<char, std::__ndk1::char_traits<char> >: error: undefined reference to 'typeinfo for std::__ndk1::ios_base'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/stdexcept:136: error: undefined reference to 'std::logic_error::logic_error(char const*)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/ios:690: error: undefined reference to 'std::__ndk1::ios_base::init(void*)'
/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/streambuf:311: error: undefined reference to 'std::__ndk1::locale::locale()'

We have built caffe2 from source and updated our application's CMakeLists.txt as follows:

cmake_minimum_required(VERSION 3.4.1)

add_library(
             native-lib
             SHARED
             src/main/cpp/native-lib.cpp
             )
find_library(
          android-lib
          android
          )

include(AndroidNdkModules)
android_ndk_import_module_cpufeatures()

add_library(
    caffe2
    STATIC
    IMPORTED
    )
set_target_properties(
    caffe2
    PROPERTIES IMPORTED_LOCATION
    ${CMAKE_CURRENT_LIST_DIR}/src/main/jniLibs/${ANDROID_ABI}/libcaffe2.a
    )
add_library(
    thread_pool
    STATIC
    IMPORTED
    )
set_target_properties(
    thread_pool
    PROPERTIES IMPORTED_LOCATION
    ${CMAKE_CURRENT_LIST_DIR}/src/main/jniLibs/${ANDROID_ABI}/libpthreadpool.a
    )
add_library(
    clog
    SHARED
    IMPORTED
    )
set_target_properties(
    clog
    PROPERTIES IMPORTED_LOCATION
    ${CMAKE_CURRENT_LIST_DIR}/src/main/jniLibs/${ANDROID_ABI}/libclog.a
    )

add_library(
    protobuf
    SHARED
    IMPORTED
    )
set_target_properties(
    protobuf
    PROPERTIES IMPORTED_LOCATION
    ${CMAKE_CURRENT_LIST_DIR}/src/main/jniLibs/${ANDROID_ABI}/libprotobuf.a
    )

add_library(
    NNPACK
    STATIC
    IMPORTED
    )
set_target_properties(
    NNPACK
    PROPERTIES IMPORTED_LOCATION
    ${CMAKE_CURRENT_LIST_DIR}/src/main/jniLibs/${ANDROID_ABI}/libnnpack.a
    )

include_directories( src/main/cpp )

find_library(
     log-lib
     log
     )

target_link_libraries(
                       native-lib
                       -Wl,--whole-archive
                       caffe2
                       -Wl,--no-whole-archive
                       NNPACK
                       thread_pool
                       clog
                       protobuf
                       cpufeatures
                       ${log-lib}
                       ${android-lib})
halfer
  • 19,824
  • 17
  • 99
  • 186
  • It seems that the `caffe2` imported target is missing its libc++ dependencies. You probably need to use `set_target_properties` to set [`IMPORTED_LINK_DEPENDENT_LIBRARIES`](https://cmake.org/cmake/help/latest/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES.html) to that location. – compor Sep 05 '18 at 13:05
  • We are using android studio. Could you clarify what command we should use and what we should link? – Augustinas Makevičius Sep 05 '18 at 13:20
  • I assumed you wrote that `CMakeLists.txt`; you should use `set_target_properties(caffe2 PROPERTIES IMPORTED_LINK_DEPENDENT_LIBRARIES [path to libc++.so or .a]`. Basically the path to the built `/home/augustinas/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/` library, wherever that is placed. – compor Sep 05 '18 at 13:35
  • Nope. Error still here. Do you have any more advice? Full output: https://pastebin.com/7iRgkVgS – Augustinas Makevičius Sep 05 '18 at 14:13
  • You still seem to be mixing `libgnustl_shared.so` with `libc++_static.a`. Some of your static libraries are built with either one or the other, that's why that link step fails. I cannot see this option `-DANDROID_STL=gnustl_shared` (suggested by [that](https://stackoverflow.com/a/51945444/3048763) post) anywhere on the CMake invocation; did you clean your CMake cache? – compor Sep 05 '18 at 14:37
  • -DANDROID_STL=gnustl_shared is used in another place. It is supplied 100% – Augustinas Makevičius Sep 05 '18 at 14:42
  • I cannot see it the first 2 lines in your pastebin link where `Error while executing process...cmake with arguments...` etc – compor Sep 05 '18 at 14:47
  • Let us [continue this discussion in chat](https://chat.stackoverflow.com/rooms/179482/discussion-between-augustinas-makevicius-and-compor). – Augustinas Makevičius Sep 05 '18 at 14:54
  • Please read [Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers?](//meta.stackoverflow.com/q/326569) - the summary is that this is not an ideal way to address volunteers, and is probably counterproductive to obtaining answers. Please refrain from adding this to your questions. – halfer Sep 05 '18 at 21:13

0 Answers0