2012-11-01 155 views
3

我想在Android中使用一些舊的C++代碼來構建一個包裝。NDK錯誤編譯

當編譯錯誤波紋管顯示:

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) 

我能做些什麼來解決這些錯誤?

+1

如果可能,然後把一些cxxx_wrap.c文件的代碼.. –

回答

6

cxxx_wrap.c開始包含一個C++ .h文件,它是一個.c文件。編譯器使用源文件的擴展名來檢測語言。所以它假設C,並扼殺在C++特定的語法。

將cxxx_wrap.c重命名爲.cpp或.cxx。或者用#ifdef __cplusplus/#endif包圍#include "Lxxxxxxx.h"行。或者通過指定-x c++編譯器選項強制C++編譯。

一旦你這樣做了,確保cxxx_wrap中的所有JNI方法都是用JNIEXPORT聲明的或者用extern "C" {}包圍的。否則,Java運行時將不會找到它們。

備案:將.h文件重命名爲.hpp將無濟於事。