如何为Android编译C ++ 14代码?

时间:2015-07-14 09:38:55

标签: android android-ndk clang c++14

是否可以使用ndk10d为Android编译C ++ 14源代码?我已经尝试了g ++和clang编译器,但似乎-std=c++1y c++_static标志不起作用。

如果我使用User/someone/Software/Android/android-ndk-r10d/platforms/android-17/arch-arm/usr/include/locale.h:55:1: error: empty struct has size 0 in C, size 1 in C++ 作为我的APP_STL,我会收到以下错误:

public class MainActivity extends AppCompatActivity { private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.context = this; Intent alarm = new Intent(this.context, AlarmReceiver.class); boolean alarmRunning = (PendingIntent.getBroadcast(this.context, 0, alarm, PendingIntent.FLAG_NO_CREATE) != null); if(alarmRunning == false) { PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context, 0, alarm, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 60000, pendingIntent); } }

编辑:我使用Mac OSX 10.10.4和Xcode 6.3.2(能够为iOS编译C ++ 14)。

5 个答案:

答案 0 :(得分:6)

我使用android-ndk-r12b-windows-x86_64,使用 -std = c ++ 14

编译成功

Android.mk

LOCAL_CPPFLAGS  = -Wall -std=c++14

答案 1 :(得分:3)

如果有人需要这个问题的答案,我找到了here

它被称为CrystaX,基本上它是Android NDK的修改版本,允许定位C ++ 14,Boost库并具有许多其他功能。

答案 2 :(得分:1)

我在Application.mk中使用以下指令。通过NDK_TOOLCHAIN_VERSION切换到clang工具链解决了许多问题。

APP_CPPFLAGS += -std=c++14
APP_STL := c++_static
NDK_TOOLCHAIN_VERSION := clang

答案 3 :(得分:0)

  

如果我使用c ++ _ static作为我的APP_STL,我会收到以下错误:

     

用户/有人/软件/ Android设备/机器人-NDK-r10d /平台/机器人-17 /弓形臂的/ usr /包括/ locale.h文件:55:1:   错误:空结构在C中的大小为0,在C ++中的大小为1

当我使用iostream时,我也一样。但这只是一个警告(我正在使用NDK 10e)并且它构建得很好。警告是“-Wextern-c-compat”,您可以像其他任何警告一样关闭它。

答案 4 :(得分:0)

我为 c++17 创建了一个带有原生 cpp 的 android 项目:

在 app/build.gradle 文件中:

NDK:21

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17" # this answer key
            }
        }
    }
}

有一个演示,https://github.com/c0i/GameV4/commit/f9a3728f1aebc70d79dc9791cc9854ef5e41cae1

谢谢,