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

前端之家收集整理的这篇文章主要介绍了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,就写到这里,原创手酸,若需转载请附上本链接,谢谢!有任何问题欢迎留言。

猜你在找的Cocos2d-x相关文章