android 编译*.so文件 需要修改的*.mk文件和 shell文件

编译*.so文件。

一般只需要修改*.mk文件中的。

MK文件中有命令不了解的请看:http://blog.csdn.net/tutuboke/article/details/28594189

LOCAL_SRC_FILES  这个命令 这个是要编译的*.cpp文件
LOCAL_EXPORT_C_INCLUDES  和
LOCAL_C_INCLUDES    是要搜索头文件的包含的目录 *.h
添路径都要填相对路径:

LOCAL_PATH := $(call my-dir) 

LOCAL_MODULE_FILENAME :=  改变生成库的名字 (作用不是很大)

返回当前MK文件的所在路径 , 上面设置的目录都是相当于这个设置的。


MK文件跟makefile文件查不多
假如用cygwin编译*.so文件,遇到头文件找不到报错的时候。一般是找最近的*.mk文件,因为不同的*.mk文件负责编译不同的模块,最后链接起来生成*.so文件。


编译报错:提示看这个
BaseClasses/UIWidget.h:30:42:  fatal error: ../Layouts/UILayoutParameter.h: No such file or directory
这样。这个是在现有搜索目录中找不到这个文件

UILayoutParameter.h
可以看一下。UIWidget.h文件。 看是怎么包含UILayoutParameter.h文件的。 
../ 上一级目录
./当前目录
一般直接在
LOCAL_EXPORT_C_INCLUDES  和
LOCAL_C_INCLUDES  加上 UILayoutParameter.h 文件相对于 LOCAL_PATH的目录即可
例子:(\为链接符  LOCAL_EXPORT_C_INCLUDES 命令必须在同一行, 要换行写 必须加上 \)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) \

                           $(LOCAL_PATH)/GUI/CCControlExtension \

路径是这样写的   太重要了$(LOCAL_PATH)/../../dragonbones \       

\  是换行连接符    都记住方向了

错误方式:



LOCAL_EXPORT_C_INCLUDES 与 LOCAL_C_INCLUDES 区别:(猜测,不明白两个都+上,保证能搜到那个文件)

LOCAL_EXPORT_C_INCLUDES 应该是普通的引入

LOCAL_C_INCLUDES  好像*.a库的引入  


如果C++用到C++11的语法:

需要在工程中-》proj.android\jni 目录中的MK文件修改:添加gcc 对 C++11的编译支持

如果是在:Android.mk 中(放到 include $(CLEAR_VARS) 下面)

LOCAL_CFLAGS  += -std=c++11

或在:Application.mk 中添加:

APP_CPPFLAGS  += -std=c++11

错误方式:

可参考:http://blog.sina.com.cn/s/blog_6fe0eb1901018rzy.html


c++异常处理代码:(如果编译*.so文件需要在 :Application.mk 中设置, 不设置异常处理的代码会报错) Application.mk 设置如下:

APP_CPPFLAGS += -fexceptions -Wno-error=format-security

错误方式:


包含其他的模块:(这两个命令一般一起使用   下面的是包含那个目录下的MK 文件,  上面的这个是载入那个模块)

LOCAL_WHOLE_STATIC_LIBRARIES += dragonbones_cocos2dx_static

$(call import-module,extensions/dragonbones)

上面第一个蓝色的  是那个mk文件(LOCAL_MODULE后面的变量, 也就是模块的名字,这是全局唯一的)

LOCAL_MODULE := dragonbones_cocos2dx_static

第二个蓝色 是载入模块的路径  (这个路径到底是依据上面 我也没弄清楚



MK文件的注释:   #

注意不能放到  一个命令里面  

比如:

LOCAL_SRC_FILES := \
Animation.cpp \
#AnimationEvent.cpp \
AnimationState.cpp \
这是错误的

编译so链接错误:



MK文件中命令  LOCAL_SRC_FILES :=    中的*.CPP文件找不到报错:



shell脚本中输入文件路径是这样的:
#注释 声明 ANDROID_NDK_ROOT变量
ANDROID_NDK_ROOT=/cygdrive/c/android-ndk-r9
# 打印变量的内容: 这个运行的时候很好用
echo "  ANDROID_NDK_ROOT    = $ANDROID_NDK_ROOT"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值