【问题标题】:C++ / JNI brace-enclosed initializer Map (Android NDK)C++/JNI 大括号封闭的初始化映射(Android NDK)
【发布时间】:2015-10-04 07:28:50
【问题描述】:

我有一个用 C++ 编写的引擎,可以与 AndroidStudio 中的 JNI 集成。 我阅读并遵循我找到的所有教程。

在 Cpp 文件中有标头的导入,其中包括 2 个用大括号括起来的映射,像这样初始化(只是示例):

第一个初始化有 2500 行... 第二个是这样的:

std::map <StateEnum, std::string> StateToString = {
  { state_one, "State 1" },
  { state_two, "State 2" },
  { state_three, "State 3" },
  { state_four, "State 4" }
};

应用程序.mk

APP_ABI     := all
APP_STL     := stlport_static
APP_CFLAGS  := -std=c++11 -fPIC

这是错误:

jni/My_header.h:line: 错误: 无法将 '{{state_one, "State 1"}, {state_two, "State 2"}..} 从 '' 转换为 ' std::map'

我还尝试将 c++ 文件编译为库,然后将其集成到我的 Android 项目中。结果是一样的。

任何人都可以帮助我。我不想将 2500 行地图初始化(使用 map.add(...))翻译成 5000 行。

【问题讨论】:

    标签: c++ dictionary android-ndk java-native-interface list-initialization


    【解决方案1】:

    STLport 实现已过时,不支持 C++11(特别是大括号初始化程序)。您应该切换到 GNU libstdc++ 或 LLVM libc++ 实现以使其正常工作:

    APP_STL := gnustl_static # GNU libstdc++
    # Or:
    APP_STL := c++_static    # LLVM libc++
    

    【讨论】:

    • 谢谢德米特里!它适用于:APP_STL := gnustl_static # GNU libstdc++
    猜你喜欢
    • 2011-05-06
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多