Cocos2dx/NDK .a静态库的制作与使用

实验目的:把mylib.a 中的 myfunc 暴露给其它源程序调用。

1. 如何制作NDK可用的.a静态库?

整个制作流程最好分2个目录来进行:
1. 新建一个 mylibsrc 目录用来存放源码并将其编译成.a静态链接库。
2. 再建一个 mylib 目录把编译好的.a文件打包成可让其它程序调用的模块。
Mylib的源码如下:
头文件mylib.h :

#ifndef __MYLIB_A
#define __MYLIB_A
#include <string>
#include <sstream>
using namespace std;
string getMySLIBMsg(int arg);
#endif
            源文件 mylib.cpp :
#include "mylib.h"
string getMySLIBMsg(int arg)
{
    stringstream tmp;
    tmp<<arg;
    string revalue = "your argument is "+tmp.str();
    return revalue;
}

我的mylibsrc目录在 E盘根目录,不过要注意要用NDK进行编译的话得在工程目录下添加一个jni子目录,并且在里面放上Android.mk,由于是编译静态文件,这里还需要Application.mk文件。这2个文件就相当于是 NDK 的Makefile
这里写图片描述
代码贴出来:
Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := mystaticLibrary
LOCAL_SRC_FILES := mylib.cpp
LOCAL_INCLUDES  := $(LOCAL_PATH)/jni

include $(BUILD_STATIC_LIBRARY)

Application.mk :

APP_MODULES     := mystaticLibrary
APP_STL := gnustl_static
#APP_STL :=stlport_static

接下来就可以Build了,用cmd cd进入 E:\mylibsrc\ ,然后直接执行ndk-build
这里写图片描述
这样就生成成功了,工程目录就多了一个obj文件夹,我们生成的静态库就在里面
这里写图片描述

2.引用已经生成好的.a静态库

接下来我再新建一个 E:\mylib 文件夹,并在该目录下新建3个子目录,分别是armeabi,armeabi-v7a,x86,如图:
这里写图片描述
然后我们把头文件也复制到这个路径下(放到这里只是方便我们打包后,提供给其它程序引用,当然也可以放到其它地方)
然后还得建立一个Android.mk文件
这里写图片描述
Android.mk的内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := mystaticLibrary
LOCAL_MODULE_FILENAME := mystaticLibrary
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libmystaticLibrary.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)

这里写图片描述
好了,这样就打包完成了,现在把这个mylib 整个引入到 需要引用的那个工程目录中就可以了。
我这里拿cocos2dx举个例子:
我新建一个cocos2dx hello wrold工程
直接把mylib文件夹拷贝到工程根目录
这里写图片描述
然后打开proj.android下的jni 下的 Android.mk文件,添加黄色框框选中的部分:
这里写图片描述
接下来我们就可以调用静态库中的函数了:
包含头文件进来:
这里写图片描述
调用静态库函数:
这里写图片描述
运行效果:
**这里写图片描述**
OK,就写到这里,原创手酸,若需转载请附上本链接,谢谢!有任何问题欢迎留言。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值