
eclipse在编译的时候,会主动删除我们拷贝在libs下的so库
如何引入第三方so库: http://bbs.csdn.net/topics/390397961
如何编译多个so库: http://www.jb51.cc/article/p-zteaamdj-kg.html
参考了以上回答,给出我具体的解决步骤:
我们先看一下我的AndroID.mk:
LOCAL_PATH:=$(callmy-dir)#模块开头include$(CLEAR_VARS)模块结束include$(BUILD_XXX)#模块1include$(CLEAR_VARS)#清除LOCAL_PATH以外的所有LOCAL_XXX变量LOCAL_MODulE:=libsmsprotocolLOCAL_SRC_fileS:= prebuilt/$(TARGET_ARCH_ABI)/libsmsprotocol.soinclude$(PREBUILT_SHARED_liBRARY)#模块2include$(CLEAR_VARS)#清除LOCAL_PATH以外的所有LOCAL_XXX变量LOCAL_MODulE:=libmegjbLOCAL_SRC_fileS:= prebuilt/$(TARGET_ARCH_ABI)/libmegjb.soinclude$(PREBUILT_SHARED_liBRARY)#模块3include$(CLEAR_VARS)$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d)$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d/external)$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d/iconv)LOCAL_MODulE:=cocos2dcpp_sharedLOCAL_MODulE_filename:=libcocos2dcpp#配置自己的源文件目录和源文件后缀名MY_fileS_PATH:=$(LOCAL_PATH)$(LOCAL_PATH)/../../ClassesMY_fileS_SUFFIX:=%.cpp%.c#递归遍历目录下的所有的文件rwildcard=$(wildcard)$(foreachd,$(wildcard*),$(callrwildcard,$d/,))#获取相应的源文件MY_ALL_fileS:=$(foreachsrc_path,$(MY_fileS_PATH),$(src_path),*.*))MY_ALL_fileS:=$(MY_ALL_fileS:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)MY_SRC_List:=$(filter$(MY_fileS_SUFFIX),$(MY_ALL_fileS))MY_SRC_List:=$(MY_SRC_List:$(LOCAL_PATH)/%=%)#去除字串的重复单词defineuniq=$(evalseen:=)$(foreach_,,$(if$(filter$_,${seen}),$(evalseen+=$_)))${seen}endef#递归遍历获取所有目录MY_ALL_Dirs:=$(dir$(foreachsrc_path,*/)))MY_ALL_Dirs:=$(calluniq,$(MY_ALL_Dirs))#赋值给NDK编译系统LOCAL_SRC_fileS:= $(MY_SRC_List)LOCAL_C_INCLUDES:=$(MY_ALL_Dirs)\LOCAL_C_INCLUDES:=$(LOCAL_PATH)/Classes LOCAL_WHolE_STATIC_liBRARIES:=cocos2dx_staticLOCAL_WHolE_STATIC_liBRARIES+=cocosdenshion_static#LOCAL_WHolE_STATIC_liBRARIES+=libiconv#LOCAL_WHolE_STATIC_liBRARIES+=Box2d_static#LOCAL_WHolE_STATIC_liBRARIES+=cocosbuilder_static#LOCAL_WHolE_STATIC_liBRARIES+=spine_static#LOCAL_WHolE_STATIC_liBRARIES+=cocostudio_static#LOCAL_WHolE_STATIC_liBRARIES+=cocos_network_static#LOCAL_WHolE_STATIC_liBRARIES+=cocos_extension_staticinclude$(BUILD_SHARED_liBRARY)#include$(BUILD_STATIC_liBRARY)表示编译成静态库#include$(BUILD_SHARED_liBRARY)表示编译成动态库。#include$(BUILD_EXECUtable)表示编译成可执行程序$(callimport-module,.)$(callimport-module,audio/androID)#$(callimport-module,iconv)#$(callimport-module,Box2D)#$(callimport-module,editor-support/cocosbuilder)#$(callimport-module,editor-support/spine)#$(callimport-module,editor-support/cocostudio)#$(callimport-module,network)#$(callimport-module,extensions) 如果通读完上边的网址,可以发现,其实cocos2dx也是作为一个模块来编译的,既然如此,那么我们就把第三方的so库,也作为模块使用 ,使用的MK写法为:
include$(CLEAR_VARS)#清除LOCAL_PATH以外的所有LOCAL_XXX变量,模块开始LOCAL_MODulE:=libsmsprotocol#模块的名字,可随意#so库相对于AndroID.mk文件所在目录的路径,$(TARGET_ARCH_ABI)会智能的选择当前平台,指定多平台,可修改Application.mkLOCAL_SRC_fileS:= prebuilt/$(TARGET_ARCH_ABI)/libsmsprotocol.soinclude$(PREBUILT_SHARED_liBRARY)#模块结束
这样,一个模块就好了,如果多个模块,依次类推,所以可以猜到,cocos2dx,也是其中的一个模块,为什么,因为当我尝试着这么写的时候,出现了这个错误:
错误的写法:include$(CLEAR_VARS)LOCAL_MODulE:=libmegjbLOCAL_SRC_fileS:= prebuilt/$(TARGET_ARCH_ABI)/a.soLOCAL_SRC_fileS+= prebuilt/$(TARGET_ARCH_ABI)/b.soinclude$(PREBUILT_SHARED_liBRARY)错误log:23:12:34****IncrementalBuildofconfigurationReleaseforprojectfish****pythonE:/project/fish/branchHeGameold/proj.androID/build_native.py-breleaseallE:/androID/androID-ndk-r9d/build/core/prebuilt-library.mk:28:***missingseparator. Stop.AndroIDNDK:ERROR:jni/AndroID.mk:smsprotocol:   Traceback(mostrecentcalllast):make.exe:Enteringdirectory`E:/project/fish/branchHeGameold/proj.androID'
分析:很熟悉的错误,是mk写法有问题,好像是分隔符的问题,是不是TAB或者空格的数量不对,插到最后,发现不是这里的原因,其实答案在红字已经给出来了,所以我大胆推测,cocos2dx也是其中的一个模块,再结合之前的文章更是印证了这个猜测。好了,编译完美通过,有什么问题,大家可以留言,至于这个mk文件,大家可以留着,毕竟经过了项目检验,问题少。
总结以上是内存溢出为你收集整理的cocos2dx项目eclipse中引入多个so库解决方案全部内容,希望文章能够帮你解决cocos2dx项目eclipse中引入多个so库解决方案所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)