我正在尝试使用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
我正在使用以下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)
我可以采取哪些措施来解决这些错误?
答案 0 :(得分:6)
来自cxxx_wrap.c
的C ++ .h文件,这是一个.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无济于事。