`

解决NDK出现error: exception handling disabled, use -fexceptions to enable的问题

阅读更多

问题来源:

 

   cocos2d-x的android平台移植过程中,在用cygwin 交叉编译.cpp文件时出现error: exception handling  disabled, use -fexceptions to enable。

 

问题解决:

   此问题的出现是编译器的异常异常捕获被禁用了,需要在Android.mk文件中开启。在Android.mk文件中添加: LOCAL_CPPFLAGS += -fexceptions就可以了。或者在Application.mk文件中添加APP_CPPFLAGS += -fexceptions

也是可以的。

 

补充:

  Android NDK r5对C++的支持情况

  android平台提供了一个最小化的C++运行库(/system/lib/libstdc++)以及与之对应的头文件。

1、C++的异常支持:

 

    从NDK r5就开始NDK的工具链就开始支持了C++的异常控制,只不过为了通用性的原因,所有的C++原文件被编译的时候都是默认的是-fno-exceptions,即不不支持异常控制的。

    使用-fexceptions标记可以开启异常控制。所以你只需要在你的每个模块的Android.mk中添加LOCAL_CPPFLAGS += -fexceptions就可以了。

    更简单的是,在你的Application.mk文件中添加APP_CPPFLAGS += -fexceptions,这种配置会自动应用到你工程的所有模块当中。

    注意:

     已被废弃的"arm-eabi-4.4.0"工具链提供的向后兼容的NDK是不支持异常的。

 

    参考资料:

           http://stackoverflow.com/questions/4663291/android-ndk-r5-and-support-of-c-exception

           http://bbs.sjtu.edu.cn/bbstcon?board=GNULinux&reid=1305092782

 

2、RTTI support:

   从NDK r5开始,NDK工具链也开始支持C++ RTTI(Runtime Type Information)了。但是,为了通用性的,所有的C++源文件被构建的时候默认是不支持RRRI的(-fno-rtti)。需要开启的话,你需要在Android.mk中添加:LOCAL_CPPFLAGS += -frtti,或者更简单的做法是在Application.mk添加APP_CPPFLAGS += -frtti。

    注意:

     已被废弃的"arm-eabi-4.4.0"工具链提供的向后兼容的NDK是不支持RTTI的。

 III. Selecting the C++ Standard Library Implementation:

By default, the headers and libraries for the minimal C++ runtime system

library (/system/lib/libstdc++.so) are used when building C++ sources.

You can however select a different implementation by setting the variable

APP_STL to something else in your Application.mk, for example:

  APP_STL := stlport_static

To select the static STLport implementation provided with this NDK.

Value APP_STL values are the following:

   system              -> Use the default minimal C++ runtime library.

   stlport_static      -> Use STLport built as a static library.

   stlport_shared      -> Use STLport built as a shared library.

WARNING: IMPORTANT CAVEAT

     AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS

     AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL

     MODULES THAT USE IT.

WARNING: END OF IMPORTANT CAVEAT

  "stlport_shared" is preferred if you have several shared libraries in your

  project that use the C++ STL, because it avoids duplication of functions

  and more importantly of global variables (e.g. std::cout) in each one of

  them, which can have surprising results.

  On the other hand, you will have to load it explicitely when starting your

  application, as in the following example:

     static {

         System.loadLibrary("stlport_shared");

         System.loadLibrary("foo");

         System.loadLibrary("bar");

     }

  Where both "libfoo.so" and "libbar.so" depend on "libstlport_shared.so".

  Note that the shared library's name if "libstlport_shared.so" to avoid

  naming conflicts with certain Android system images which include a

  system-level libstlport.so (which happens to not be ABI-stable and

  cannot be used from NDK-generated machine code).

  "stlport_static" is preferred if you have only one shared library in your

  project: only the STL functions and variables you actually need will be

  linked to your machine code, reducing its code size, and you won't need

  to load the dynamic stlport_shared at startup.

 

IV. STLport-specific issues:

----------------------------

This NDK provides prebuilt static and shared libraries for STLport,

but you can force it to be rebuilt from sources by defining the following

in your environment or your Application.mk before building:

    STLPORT_FORCE_REBUILD := true

STLport is licensed under a BSD-style open-source license. See

sources/cxx-stl/stlport/README for more details about the library.

 

V. Future Plans:

----------------

  - Make STLport compatible with C++ exceptions and RTTI

  - Full GNU libstdc++ support

 

转自:http://drovik.com/html/8410924155.html

分享到:
评论

相关推荐

    Android ndk string处理:ndk-string-test

    Android ndk string处理:ndk-string-test

    android-ndk(android-ndk-r23b-linux.zip)

    这个“android-ndk-r23b-linux.zip”文件是NDK的一个特定版本,即r23b,专为Linux操作系统设计。在Android应用开发中,NDK扮演着至关重要的角色,它允许开发者使用原生代码(如C和C++)来编写部分应用,以提升性能或...

    android-ndk(android-ndk-r25b-linux.zip)

    Linux用户需要解压“android-ndk-r25b-linux.zip”,将其添加到PATH环境变量中,以便在终端中直接使用ndk-build、ndk-gdb等命令。此外,Linux下的开发环境设置,如编译器配置、交叉编译等,也需要熟悉。 总结来说...

    android-ndk(android-ndk-r25b-windows.zip)

    这个压缩包“android-ndk-r25b-windows.zip”包含了NDK的第25个版本,专为Windows操作系统设计。NDK的主要功能是让开发者能够在Android应用中使用原生代码,例如C、C++,以实现高性能计算或利用硬件加速等功能。 **...

    android-ndk-r16b-windows-x86_64.zip

    "android-ndk-r16b-windows-x86_64.zip" 是NDK的第16个版本,特别为Windows 64位操作系统设计。 在Android应用开发中,通常我们使用Java或Kotlin编写大部分代码,但由于这些语言运行在Dalvik或ART虚拟机上,它们的...

    android-ndk-r18b-windows-x86_64.zip

    标题中的“android-ndk-r18b-windows-x86_64.zip”表明这是一个适用于Windows 64位系统的Android NDK版本,具体为R18B更新。 在Android应用开发中,NDK的主要用途包括: 1. **性能优化**:对于计算密集型或图形...

    android-ndk(android-ndk-r26b-windows.zip)

    这个压缩包“android-ndk-r26b-windows.zip”包含了NDK的第26个版本,专为Windows操作系统设计。通过这个工具,开发者可以利用原生代码编写高性能、低级别的应用模块,比如图形处理、物理模拟或音频处理等。 在...

    android-ndk(android-ndk-r23b-windows.zip)

    这个"android-ndk-r23b-windows.zip"压缩包包含了NDK的第23个版本,专为Windows操作系统设计。NDK是Android应用开发中的一个重要组成部分,它允许开发者使用原生代码(如C、C++)来编写部分应用程序,从而利用底层的...

    android-ndk(android-ndk-r26b-linux.zip)

    这个“android-ndk-r26b-linux.zip”文件是NDK的一个特定版本——R26B,特别为Linux操作系统设计。 NDK的主要功能和知识点包括: 1. **原生库支持**:NDK允许开发者创建原生库,这些库可以直接在设备的CPU上运行,...

    NDK工具android-ndk-r10e-linux-x86_64

    标题中的"android-ndk-r10e-linux-x86_64"表明这是一个特定版本的NDK,即版本号为R10e,针对Linux 64位系统的版本。 **NDK的基本概念与功能:** 1. **本地库开发:**NDK允许开发者使用C/C++编写部分或全部应用代码...

    android-ndk(android-ndk-r25b-darwin.zip)

    `android-ndk-r25b-darwin.zip` 是针对macOS系统的NDK版本,版本号为r25b,包含了一系列用于构建、编译和调试原生代码的工具。 在Android应用开发中,NDK的主要作用和知识点包括: 1. **JNI (Java Native ...

    MediaCodec NDK

    将MediaCodec与FFmpeg和SurfaceTexture结合使用,可以在Android NDK环境中实现高效、低延迟的音视频播放和处理。 `ZmDecode.cpp`和`ZmDecode.h`很可能是解码模块的核心源代码,它们可能包含了使用MediaCodec进行...

    android-ndk(android-ndk-r26b-darwin.zip)

    在本案例中,我们关注的是"android-ndk-r26b-darwin.zip",这是一个专为macOS系统设计的NDK版本。 **Android NDK的主要功能和用途** 1. **性能优化**:对于计算密集型或图形密集型的应用,如游戏和复杂的科学计算...

    android-ndk-r19c-linux-x86_64.zip

    echo 'export PATH=$PATH:/opt/android/ndk/android-ndk-r19c' | sudo tee -a ~/.bashrc source ~/.bashrc ``` 现在,NDK已准备就绪。接下来,我们需要安装QT 5.13。访问QT官方网站(https://www.qt.io/download)...

    lua-nginx-module-0.10.9rc7

    如果版本不匹配,可能会遇到如时间类型不兼容等问题,这通常会导致Nginx配置加载失败或者运行时出现错误。 Lua-Nginx-Module的安装和配置通常包括以下几个步骤: 1. **获取源码**:从官方仓库或镜像站点下载lua-...

    android-ndk-r16-beta1-windows-x86_64

    《Android NDK R16 Beta 1:游戏与安卓开发的利器》 Android NDK(Native Development Kit)是Google提供的一款用于安卓应用开发的重要工具,它允许开发者在Android平台上使用C/C++语言进行原生代码编程。这次我们...

    安卓NDK android-ndk-r12b-windows-x86_64

    可用于安卓 qt开发 安卓NDK android-ndk-r12b-windows-x86_64

    android-ndk-r17c-windows-x86_64.zip

    "android-ndk-r17c-windows-x86_64.zip" 是针对Windows 64位系统的Android NDK版本r17c的压缩包文件。这个版本在NDK历史中占有特殊地位,因为它标志着GCC(GNU Compiler Collection)支持的终结。 NDK的核心功能...

    android-ndk-r20b-windows-x86_64.zip

    对于64位Windows用户来说,"android-ndk-r20b-windows-x86_64.zip"是一个关键资源,它意味着可以直接在Windows环境中搭建本地开发环境,无需担心系统架构问题。解压后的文件包括了所有必要的工具和库,如编译器、...

    ffmpeg学习笔记3 编译fdk-aac(Win10+android-ndk-r22)生成的arm64-v8a动、静态库

    ffmpeg学习笔记3 编译fdk-aac(Win10+android-ndk-r22)生成的arm64-v8a动、静态库 https://blog.csdn.net/aggs1990/article/details/124577004 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者...

Global site tag (gtag.js) - Google Analytics