NDK构建错误

Vic*_*tor 3 c c++ android android-ndk

我正在尝试使用Android中的一些旧C++代码构建一个包装器.

在编译下面的错误时会显示:

In file included from /usr/local/android/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_algobase.h:61:0,
                 from /usr/local/android/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_tree.h:63,
                 from /usr/local/android/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/map:60,
                 from /home/vocalize/source/xxxxxxxxxxxxxxxxxxxxx/Lxxxxxxx.h:9,
                 from /home/vocalize/source/xxxxxxxxxxxxxxxxx/jni/cxxx_wrap.c:3:
/usr/local/android/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/functexcept.h:43:1: error: unknown type name 'namespace'
/usr/local/android/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/functexcept.h:44:1: error: expected ',' or ';' before '{' token
Run Code Online (Sandbox Code Playgroud)

我正在使用以下Makefile.mk

include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(MY_LIB_DIR)include

LOCAL_CFLAGS += -DHAVE_CONFIG_H
LOCAL_CFLAGS += -DANDROID_NDK

LOCAL_PATH := $(BASE_PATH)
LOCAL_MODULE := cxxxx_lib

LOCAL_SRC_FILES := cxxxx_wrap.c

LOCAL_STATIC_LIBRARIES := my_lib
LOCAL_LDLIBS := -llog 

include $(BUILD_SHARED_LIBRARY) 
Run Code Online (Sandbox Code Playgroud)

我能做些什么来解决这些错误?

Sev*_*yev 6

正在包含一个C++ .h文件cxxx_wrap.c,它是一个.c文件.编译器使用源文件的扩展名来检测语言.所以它假设C,并且扼杀了C++特定的语法.

将cxxx_wrap.c重命名为.cpp或.cxx.或者围绕着这#include "Lxxxxxxx.h"条线#ifdef __cplusplus/#endif.或者通过指定-x c++编译器选项强制C++编译.

完成后,确保cxxx_wrap中的所有JNI方法都使用JNIEXPORT声明或包围extern "C" {}.否则,Java运行时将找不到它们.

对于记录:将.h文件重命名为.hpp将无济于事.