2010-07-10 46 views
19

Tôi đang cố gắng tạo mã gốc APP cho Android. Mã gốc có trong cplusplus. Bất cứ khi nào tôi cố gắng thực hiện, lỗi sau sẽ xuất hiện.Bật ngoại lệ C++

H236Plus.cpp:135: error: exception handling disabled, use -fexceptions to enable

Làm cách nào để sử dụng ngoại lệ để cho phép xử lý ngoại lệ và tôi sử dụng nó ở đâu?

+0

Để bật tính năng này bằng ndk-build, hãy sử dụng biến LOCAL_CPP_FEATURES mới trong Android.mk của bạn, như sau: LOCAL_CPP_FEATURES + = ngoại lệ – hB0

Trả lời

5

Bạn cần xây dựng với số custom NDK của CrystaX. Nó có đầy đủ libstdC++, RTTI và hỗ trợ ngoại lệ. Nó thường là công cụ tốt nhất cho phát triển Android mà tôi biết.

4

-fexception là trình chuyển đổi trình biên dịch. Làm thế nào bạn sử dụng nó phụ thuộc vào thiết lập trình biên dịch của bạn. Bạn đang sử dụng trình biên dịch nào? IDE? công cụ xây dựng?

+0

NDK với cygwin. Tất cả tôi đã làm là gõ "làm cho APP = dự án" tại Cygwin trong thư mục của thư mục ndk. – Gidiyo

+0

Nên có một Makefile trong thư mục này. Điều này kiểm soát cách mọi thứ được biên dịch. Đó là nơi để tìm các công tắc trình biên dịch. – EricSchaefer

+0

Có phải là ** - fexception ** hoặc ** - fexceptions ** không? –

3

Trong cờ trình biên dịch, hãy thêm nhận dạng vào trong Makefile của bạn.

+0

Đã bao giờ làm việc chưa? Với điều này, bạn sẽ có -fno-ngoại lệ cùng với -fexceptions. – ognian

+0

Chắc chắn bạn phải loại bỏ các ngoại lệ -fno để có các ngoại lệ có hiệu lực? – marienke

26

Tùy thuộc vào thời gian bạn đang sử dụng. Nếu bạn không sử dụng thời gian chạy hệ thống và đang xây dựng với ndk-build, bạn thêm bất kỳ các tập tin Android.mk của bạn:

  • LOCAL_CPP_FEATURES + = trường hợp ngoại lệ (Recommended)
  • LOCAL_CPPFLAGS + = -fexceptions

Ngoài ra, bạn có thể thêm các dòng sau vào tập tin Application.mk của bạn:

  • APP_CPPFLAGS + = -fexceptions

Có nhiều thông tin trong docs/CPLUSPLUS-SUPPORT.html trong thư mục NDK bạn

1

tôi giải quyết vấn đề này bằng cách thêm CFLAGS "-fexceptions" thành phần ndk của kịch bản build.gradle, như thế này:

ndk { 
    ... 
    cFlags "-fexceptions" 
} 
2

với phiên bản mới nhất của Android Studio đây là nội dung build.gradle của tôi trông giống như:

model { 
    android { 
     compileSdkVersion 23 
     buildToolsVersion "23.0.2" 

     buildTypes { 
      release { 
       minifyEnabled false 
       shrinkResources false 
       proguardFiles.add(file("proguard-rules.txt")) 
       signingConfig = $("android.signingConfigs.release") 
      } 
     } 

     defaultConfig { 
      applicationId "my.android.app" 
      minSdkVersion.apiLevel 16 
      targetSdkVersion.apiLevel 23 
      versionCode 29 
      versionName "my.latest.version" 
     } 

     ndk { 
      moduleName "jni-utils" 
      ldLibs.add("log") 
      cppFlags.add("-std=c++11") 
      cppFlags.add("-fexceptions") 
      stl "gnustl_static" 
     } 
    } 
    android.signingConfigs { 
     create("release") { 
      storeFile "C:\\Android\\Git\\MyProject\\keystore\\keystoreCommon" 
      storePassword "put you password here" 
      keyAlias "put your alias here" 
      keyPassword "put your password here" 
     } 
    } 
} 
0

Tham khảo this câu trả lời của @Tundebabzy nếu bạn đang sử dụng hệ thống xây dựng ndk-build.

Đối CMake xây dựng hệ thống

thêm dòng sau vào mô-đun cấp của bạn build.gradle file:

android { 
    ... 
    defaultConfig { 
    ... 
    externalNativeBuild { 

     // For ndk-build, instead use ndkBuild {} 
     cmake { 
     // Enables exception-handling support. 
     cppFlags "-fexceptions" 
     } 
    } 
    } 
} 
... 

Để biết thêm thông tin Xem this Link.