关于ndk命令编译so

因为要用批处理实现工程的SVN更新,打包SO,生成APK,所有使用了批处理命令和ant。其中,我发现去编译SO 的时候出现了状况
MK文件如下:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_CFLAGS += -fpermissive

LOCAL_SHORT_COMMANDS := true

LOCAL_MODULE_FILENAME := libcocos2dcpp

遍历目录及子目录的函数

define walk
(wildcard (1)) (foreach e, (wildcard (1)/*), (call walk, $(e)))
endef

遍历Classes目录

ALLFILES = (call walk, (LOCAL_PATH)/…/…/Classes)

FILE_LIST := hellocpp/main.cpp

从所有文件中提取出所有.cpp文件

FILE_LIST += (filter %.cpp, (ALLFILES))

LOCAL_SRC_FILES := (FILE_LIST:(LOCAL_PATH)/=)

FILE_INCLUDES := (shell find (LOCAL_PATH)/…/…/Classes -type d)
LOCAL_C_INCLUDES := (FILE_INCLUDES) LOCAL_C_INCLUDES += (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/cocos2dx/include
(LOCAL_PATH)/../../../cocos2dx-2.2.6/cocos2dx/kazmath/include \ (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/cocos2dx/platform/android
(LOCAL_PATH)/../../../cocos2dx-2.2.6/cocos2dx/platform/third_party/android/prebuilt \ (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/cocos2dx/platform/third_party/android/prebuilt/libiconv/include
(LOCAL_PATH)/../../../cocos2dx-2.2.6/cocos2dx/platform/third_party/android/prebuilt/libxml2/include \ (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/cocos2dx/platform/third_party/android/prebuilt/libcurl/include/curl
(LOCAL_PATH)/../../../cocos2dx-2.2.6/external \ (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/CocosDenshion/include
(LOCAL_PATH)/../../../cocos2dx-2.2.6/extensions \ (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/scripting/lua/tolua
(LOCAL_PATH)/../../../cocos2dx-2.2.6/scripting/lua/luajit/include \ (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/scripting/lua/cocos2dx_support
$(LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/cocos2dx/support/zip_support

LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_curl_static
LOCAL_WHOLE_STATIC_LIBRARIES += libiconv
LOCAL_WHOLE_STATIC_LIBRARIES += libxml2_static

(call import-add-path, (LOCAL_PATH)/../../../cocos2dx-2.2.6) \ (call import-add-path, (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/cocos2dx)
$(call import-add-path, (LOCAL_PATH)/…/…/…/cocos2dx-2.2.6/cocos2dx/platform/third_party/android/prebuilt) \

include (BUILD_SHARED_LIBRARY) (call import-module,cocos2dx)
(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl) (call import-module,CocosDenshion/android)
(call import-module,extensions) (call import-module,libxml2)
(call import-module,libiconv) (call import-module,scripting/lua/proj.android)
##############################################################
然后出现了如下的错误:

E:\SVNwc\BomberMan_3\proj.android\jni>ndk-build “NDK_MODULE_PATH=E:/SVNwc/cocos2
dx-2.2.6;E:/SVNwc/cocos2dx-2.2.6/cocos2dx/platform/third_party/android/prebuilt”

FIND: 参数格式不正确
Android NDK: WARNING: Ignoring unknown import directory: (LOCAL_PATH)/…/…/…/
cocos2dx-2.2.6
Android NDK: WARNING: Ignoring unknown import directory: (LOCAL_PATH)/…/…/…/
cocos2dx-2.2.6/cocos2dx
Android NDK: WARNING: Ignoring unknown import directory: (LOCAL_PATH)/…/…/…/
cocos2dx-2.2.6/cocos2dx/platform/third_party/android/prebuilt
Android NDK: WARNING:E:/SVNwc/cocos2dx-2.2.6/cocos2dx/Android.mk:cocos2dx_static
: LOCAL_LDLIBS is always ignored for static libraries
Compile++ thumb: cocos2dcpp_shared <= main.cpp
E:/SVNwc/BomberMan_3/proj.android//jni/hellocpp/main.cpp:1:25: fatal error: AppD
elegate.h: No such file or directory
compilation terminated.
make.exe: *** [E:/SVNwc/BomberMan_3/proj.android//obj/local/armeabi/objs/cocos2d
cpp_shared/hellocpp/main.o] Error 1

E:\SVNwc\BomberMan_3\proj.android\jni>

看字面意思是class未引入成功,但是我用CYGwin编译是没有问题的:10:

:2::2::2::2::2::2::2:

你加的库文件路径不对吧

但是CYGWIN可以编译成功啊,因为之前就是用CYGWIN编译so并且用eclipse打开的。
我用你的MK文件还是报找不到路径的错误:6::6::6:

解决了,原来是目录的问题,网上那个循环的CPP目录有问题
应该用这个
LOCAL_C_INCLUDES := (LOCAL_PATH)/../../Classes LOCAL_C_INCLUDES += (shell ls -FR (LOCAL_C_INCLUDES) | grep (LOCAL_PATH)/ ) LOCAL_C_INCLUDES := (LOCAL_C_INCLUDES:(LOCAL_PATH)/%:=(LOCAL_PATH)/%)