更新ndk修订版11后,错误未定义对std :: __ ndk1的引用

时间:2016-03-21 09:37:25

标签: android c++ android-ndk

未定义引用'webrtc :: CreateSessionDescription(std :: __ ndk1 :: basic_string,std :: __ ndk1 :: allocator> const&,std :: __ ndk1 :: basic_string,std :: __ ndk1 :: allocator> const& amp ;,webrtc :: SdpParseError *)'

更新android ndk修订版11后,我遇到了一些问题。 由于上面的原因,我无法建立我的项目。

在Android Developer中,我发现'将libc ++的内联命名空间更改为std :: __ ndk1以防止平台libc ++出现ODR问题。',但我无法理解。

我该如何解决?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我遇到了错误undefined reference to 'std::ndk 1::cout'

我通过将gradle文件更改为:

来修复它
externalNativeBuild {
    cmake {
        cppFlags "-DANDROID_STL=c++_shared"
    }
}

答案 1 :(得分:0)

我认为我的方式或多或少都很棘手,但它确实有效。 我进入/ ndk-root-path // sources / cxx-stl / llvm-libc ++ / libcxx / include,有一个名为' __ config'的文件。打开它并查找所有行' _LIBCPP_BEGIN_NAMESPACE_STD',这是内联命名空间' __ ndk1'添加。所以我只是注释掉所有内联命名空间,例如:

   352 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {//inline namespace _LIBCPP_NAMESPACE {
   353 #define _LIBCPP_END_NAMESPACE_STD  } //}
   354 #define _VSTD std//::_LIBCPP_NAMESPACE

   356 namespace std {
    //  inline namespace _LIBCPP_NAMESPACE {
    //  }
    }

这些代码应该有4或5个。在评论之后,你可以重建你的ndk项目,它应该可行。