加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:04:57 所属栏目:百科 来源:网络整理
导读:实验目的:把mylib.a 中的 myfunc 暴露给其它源程序调用。 1. 如何制作NDK可用的.a静态库? 整个制作流程最好分2个目录来进行: 1. 新建一个 mylibsrc 目录 用来存放源码并将其编译成.a静态链接库。 2. 再建一个 mylib 目录 把编译好的.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,就写到这里,原创手酸,若需转载请附上本链接,谢谢!有任何问题欢迎留言。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读