【问题标题】:Error undefined reference to std::__ndk1 after update ndk revision 11更新 ndk 修订版 11 后对 std::__ndk1 的错误未定义引用
【发布时间】:2016-03-21 09:37:25
【问题描述】:

对 'webrtc::CreateSessionDescription(std::__ndk1::basic_string, std::__ndk1::allocator > const&, std::__ndk1::basic_string, std::__ndk1::allocator > const&, webrtc: :SdpParseError*)'

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

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

我该如何解决?

谢谢你帮助我。

【问题讨论】:

    标签: android c++ android-ndk


    【解决方案1】:

    我认为我的方法或多或少有些棘手,但它确实有效。 我进入/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 项目,它应该可以工作。

    【讨论】:

    • 我想如果你已经用 r10 构建了自己的 llvm 的 libc++,这可能会起作用
    【解决方案2】:

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

    我通过将我的 gradle 文件更改为这个来修复它:

    externalNativeBuild {
        cmake {
            cppFlags "-DANDROID_STL=c++_shared"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 2018-10-23
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多