• <legend id='EAhd8'><style id='EAhd8'><dir id='EAhd8'><q id='EAhd8'></q></dir></style></legend>

    <small id='EAhd8'></small><noframes id='EAhd8'>

      <bdo id='EAhd8'></bdo><ul id='EAhd8'></ul>

  • <tfoot id='EAhd8'></tfoot>
        <i id='EAhd8'><tr id='EAhd8'><dt id='EAhd8'><q id='EAhd8'><span id='EAhd8'><b id='EAhd8'><form id='EAhd8'><ins id='EAhd8'></ins><ul id='EAhd8'></ul><sub id='EAhd8'></sub></form><legend id='EAhd8'></legend><bdo id='EAhd8'><pre id='EAhd8'><center id='EAhd8'></center></pre></bdo></b><th id='EAhd8'></th></span></q></dt></tr></i><div id='EAhd8'><tfoot id='EAhd8'></tfoot><dl id='EAhd8'><fieldset id='EAhd8'></fieldset></dl></div>

        如何在 Android NDK 和 STLport 中使用 boost 库(包括 shared_ptr)

        How to use the boost library (including shared_ptr) with the Android NDK and STLport(如何在 Android NDK 和 STLport 中使用 boost 库(包括 shared_ptr))
            <tbody id='oWABN'></tbody>
          <i id='oWABN'><tr id='oWABN'><dt id='oWABN'><q id='oWABN'><span id='oWABN'><b id='oWABN'><form id='oWABN'><ins id='oWABN'></ins><ul id='oWABN'></ul><sub id='oWABN'></sub></form><legend id='oWABN'></legend><bdo id='oWABN'><pre id='oWABN'><center id='oWABN'></center></pre></bdo></b><th id='oWABN'></th></span></q></dt></tr></i><div id='oWABN'><tfoot id='oWABN'></tfoot><dl id='oWABN'><fieldset id='oWABN'></fieldset></dl></div>
        1. <tfoot id='oWABN'></tfoot>

            <small id='oWABN'></small><noframes id='oWABN'>

            <legend id='oWABN'><style id='oWABN'><dir id='oWABN'><q id='oWABN'></q></dir></style></legend>
              • <bdo id='oWABN'></bdo><ul id='oWABN'></ul>

                1. 本文介绍了如何在 Android NDK 和 STLport 中使用 boost 库(包括 shared_ptr)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  这与其说是一个问题,不如说是一个答案,因为我已经弄清楚了,至少就干净利落地编译库而言.我的主要问题是让 shared_ptr 工作.

                  This is more of an answer than a question, because I've figured it out, at least as far as cleanly compiling the library. The main issue for me was to get shared_ptr working.

                  成分:

                  Boost v. 1.45.0

                  Boost v. 1.45.0

                  http://www.anddev.org/viewtopic.php?p=29939.

                  NDK 的 r4b 版本.

                  Version r4b of the NDK.

                  路线:

                  在您的 Android.mk 文件中添加:

                  In your Android.mk file add:

                  LOCAL_CFLAGS += -DBOOST_EXCEPTION_DISABLE -D_STLP_NO_EXCEPTIONS -DOS_ANDROID -D_STLP_USE_SIMPLE_NODE_ALLOC
                  

                  在 stlport/stl/_string.h 的第 613 行删除对 __stl_throw_length_error 的调用.如果您愿意,可以使用 _STLP_NO_EXCEPTIONS.

                  Remove the call to __stl_throw_length_error at line 613 of stlport/stl/_string.h. You can use _STLP_NO_EXCEPTIONS if you like.

                  在第 261 行之后编辑 boost/boost/smart_ptr/shared_ptr.hpp 以消除 shared_ptr 构造函数中对 boost::throw_exception 的调用.我在方法的整个主体周围使用了 #ifndef BOOST_EXCEPTION_DISABLE.(但请参阅下面的答案.)

                  Edit boost/boost/smart_ptr/shared_ptr.hpp after line 261 to get rid of the call to boost::throw_exception in the shared_ptr constructor. I used #ifndef BOOST_EXCEPTION_DISABLE around the entire body of the method. (But see the answer below.)

                  接下来您需要提供一些缺失的部分.使用以下内容创建头文件:

                  Next you need to supply some missing pieces. Create a header file with the following:

                  #ifdef OS_ANDROID
                  
                  #include <exception>
                  
                  namespace std
                  {
                      struct bad_alloc : public exception { bad_alloc operator()(){}};
                  }
                  
                  #endif
                  

                  和一个带有精简异常类以支持 bad_alloc 的源文件:

                  and a source file with a stripped-down exception class to support bad_alloc:

                  #ifdef OS_ANDROID
                  
                  #include <exception>
                  
                  namespace std
                  {
                      exception::exception() {}
                      exception::~exception() {}
                      const char* exception::what() const {}
                  }
                  
                  #endif
                  

                  在包含 boost/shared_ptr.hpp 的任何位置包含标题.编译源代码并将其添加到您的库中.

                  Include the header wherever you're including boost/shared_ptr.hpp. Compile the source and add it to your library.

                  推荐答案

                  事实证明,这种方法在编译可调试库时并不完全有效.发布库是用 -O2 编译的,它优化了一些缺陷,但调试库是用 -O0 完成的,这揭示了一些额外的问题.此外,我对必须编辑 boost 文件不太满意.所以通过一些额外的研究,我想出了以下解决方案.

                  It turned out that this approach does not entirely work when compiling a debuggable library. The release library is compiled with -O2 which optimizes out some infelicities, but the debug library is done with -O0 which reveals some additional problems. Furthermore, I wasn't too happy about having to edit the boost files. So with some additional study, I've come up with the following solution.

                  首先,不要编辑任何 boost 文件.而是将以下内容添加到 std 命名空间内的标头中:

                  First, don't edit any of the boost files. Instead add the following to the header within the std namespace:

                  struct bad_cast : public exception {bad_cast operator()(){}};
                  

                  接下来将以下内容添加到源文件中:

                  Next add the following to the source file:

                  namespace boost
                  {
                      void throw_exception(std::exception const&) {}
                  }
                  

                  现在即使在 AndroidManifest.xml 中使用 android:debuggable="true" 也可以编译并链接到应用程序中.它不在模拟器中运行,但是在我包含这个库之前它也没有这样做.

                  This now compiles and links into the application even with android:debuggable="true" in AndroidManifest.xml. It doesn't run in the emulator, but then it wasn't doing that before I included this library either.

                  这篇关于如何在 Android NDK 和 STLport 中使用 boost 库(包括 shared_ptr)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  How to limit the number of running instances in C++(C++中如何限制运行实例的数量)
                  Using boost::asio::async_read with stdin?(将 boost::asio::async_read 与 stdin 一起使用?)
                  How to find out what dependencies (i.e other Boost libraries) a particular Boost library requires?(如何找出特定 Boost 库需要哪些依赖项(即其他 Boost 库)?)
                  What#39;s the purpose of a leading quot;::quot; in a C++ method call(引导“::的目的是什么?在 C++ 方法调用中)
                  Boost Spirit x3: parse into structs(Boost Spirit x3:解析为结构体)
                  How boost auto-linking makes choice?(boost自动链接如何做出选择?)
                  • <tfoot id='CubzH'></tfoot>
                        <bdo id='CubzH'></bdo><ul id='CubzH'></ul>
                        <i id='CubzH'><tr id='CubzH'><dt id='CubzH'><q id='CubzH'><span id='CubzH'><b id='CubzH'><form id='CubzH'><ins id='CubzH'></ins><ul id='CubzH'></ul><sub id='CubzH'></sub></form><legend id='CubzH'></legend><bdo id='CubzH'><pre id='CubzH'><center id='CubzH'></center></pre></bdo></b><th id='CubzH'></th></span></q></dt></tr></i><div id='CubzH'><tfoot id='CubzH'></tfoot><dl id='CubzH'><fieldset id='CubzH'></fieldset></dl></div>
                      • <small id='CubzH'></small><noframes id='CubzH'>

                            <tbody id='CubzH'></tbody>

                          1. <legend id='CubzH'><style id='CubzH'><dir id='CubzH'><q id='CubzH'></q></dir></style></legend>