zoukankan      html  css  js  c++  java
  • Android NDK入门实例 计算斐波那契数列二生成.so库文件

    上一篇文章输生成了jni头文件,里面包含了本地C代码的信息,提供我们引用的C头文件。下面实现本地代码,再用ndk-build编译生成.so库文件。由于编译时要用到make和gcc,这里很多人是通过安装cygwin,搭建一个linux环境编译。我是直接用Android NDK里ndk-build工具编译,没有安装cygwin,也能编译。

    一、编写本地代码fib.c

    首先在过程fiblib下新建一个目录jni,将上一篇生成的jni头文件添加到这个目录,接着在源码目录下新建文件fib.c:

    文件jni/fib.c:

    #include "com_example_fiblib_FibLib.h"
    //递归的斐波那契算法
    long fibN(long n){
     if(n<0)
      return 0;
     if(n==1)
      return 1;
     return fibN(n-1)+fibN(n-2);
    }
    //迭代的斐波那契算法
    long fibNI(long n){
     long previous = -1;
     long result = 1;
     long i = 0;
     int sum = 0;
     for (i=0;i<=n;i++){
      sum = result + previous;
      previous = result;
      result = sum;
     }
     return result;
    }
    //与头文件生成的JNI方法的签名一致,否则运行时无法调用到本地代码
    JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibN
      (JNIEnv *env, jclass obj, jint n){
     return fibN(n);
    }
    JNIEXPORT jlong JNICALL Java_com_example_fiblib_FibLib_fibNI
      (JNIEnv *env, jclass obj, jint n){
     return fibNI(n);
    }

    二、编写Makefile·

    创建本地库之前,需要编写Android.mk,描述编译项目

    文件jni/Android.mk

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE	:= fib
    LOCAL_SRC_FILES	:= fib.c
    
    include $(BUILD_SHARED_LIBRARY)

    三、编译构建共享库

    这里需要在jni下执行ndk-build生成库文件,即在libs下生成共享库libfib.so


    右击工程Refresh下,就看到生成了libfib.so

  • 相关阅读:
    Luogu P5030 长脖子鹿放置(网络流)
    BZOJ3037 创世纪(基环树DP)
    LuoguP1240 诸侯安置
    LuoguP3128 [USACO15DEC]最大流Max Flow (树上差分)
    总结-一本通提高篇&算竞进阶记录
    LuoguP5022 旅行 (割点,基环树)
    $tsinsenA1067$
    $SCOJ4427 Miss Zhao's Graph$
    $Edmonds-Karp$[网络流]
    $AC自动机$
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3188349.html
Copyright © 2011-2022 走看看