上一篇文章输生成了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

Android NDK入门实例 计算斐波那契数列二生成.so库文件的更多相关文章

  1. Android NDK入门实例 计算斐波那契数列一生成jni头文件

    最近要用到Android NDK,调用本地代码.就学了下Android NDK,顺便与大家分享.下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码.以及比较本地代码 ...

  2. 使用并行的方法计算斐波那契数列 (Fibonacci)

    更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...

  3. 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)

    动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...

  4. 用递归方法计算斐波那契数列(Recursion Fibonacci Sequence Python)

    先科普一下什么叫斐波那契数列,以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci ...

  5. shell脚本计算斐波那契数列

    计算斐波那契数列 [1,1,2,3,5,8,,,,,] #!/bin/bash n=$ num=( ) i= while [[ $i -lt $n ]] do let num[$i]=num[$i-] ...

  6. java 递归及其经典应用--求阶乘、打印文件信息、计算斐波那契数列

    什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即 ...

  7. 关于Haskell计算斐波那契数列的思考

    背景 众所周知,Haskell语言是一门函数式编程语言.函数式编程语言的一大特点就是数值和对象都是不可变的,而这与经常需要对状态目前的值进行修改的动态规划算法似乎有些"格格不入", ...

  8. X86汇编——计算斐波那契数列程序(详细注释和流程图说明)

    X86汇编实现斐波那契数列 程序说明: 输入斐波那契数列的项数, 然后依次输出斐波那契数列, 输入的项数小于256且为数字, 计算的项数不能超过2^16次方, 输入失败是 不会回显数字 因为存结果是A ...

  9. python计算斐波那契数列

    斐波那契数列就是黄金分割数列 第一项加第二项等于第三项,以此类推 第二项加第三项等于第四项 代码如下 这一段代码实现fib(n)函数返回第n项,PrintFN(m,n,i)函数实现输出第i项斐波那契数 ...

随机推荐

  1. 编写高质量代码改善java程序的151个建议——[52-57]String !about String How to use them?

    原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),须要转载的,保留下! Thanks Although the world is full of s ...

  2. Swift - 短信发送功能的实现

    使用MessageUI.framework框架可以实现短信发送功能,步骤如下: (1)首先判断设备是否有发送短信功能 (2)如果设备允许发送短信,创建一个MFMessageComposeViewCon ...

  3. AJAX实现类似百度的搜索提示,自动补全和键盘、鼠标操作

    <script type="text/javascript"> $(document).ready(function(){ var highlightIndex = - ...

  4. fzu 1913 Easy Comparison(字符串)

    题目链接:fzu 1913 Easy Comparison 题目大意:给出一个字符串,计算与它按照字典序排序排列后的字符串有多少个位置不同. 解题思路:水体,sort一下,然后遍历一遍就好. #inc ...

  5. 基于visual Studio2013解决面试题之0710求方优化

     题目

  6. javascript 学习资料网址一览

    1.http://www.runoob.com/ 2.https://developer.mozilla.org/zh-CN/ 3.http://www.imooc.com/   视频类

  7. uva 10692 - Huge Mods(数论)

    题目链接:uva 10692 - Huge Mods 题目大意:给出一个数的次方形式,就它模掉M的值. 解题思路:依据剩余系的性质,最后一定是行成周期的,所以就有ab=abmod(phi[M])+ph ...

  8. python学习——截图工具编写

    学习一门语言最好的方法便是实践,想要拿Python写一个截图工具,网上一搜资料果然已经很多,前辈们都已经做的很到位了.现在就一步步来学习一下: 首先学习截图整个桌面的方法,可以使用Python中的PI ...

  9. VC++ WIN32 sdk实现按钮自绘详解.

    网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片:    首先建立一个标准的Win32 Application 工程.选择a simple Wi ...

  10. java大牛list

    1 Java的未来 Java能干什么.不能干什么,一开始就要搞清楚.这对于成为一个纯种的Java程序猿至关重要. 2 构建Java运行环境 Java运行在服务器,服务器都是Linux系统,对于真正程序 ...