hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 759|回复: 2

GMP如何在android apk应用上调用?

[复制链接]

557

主题

557

帖子

1898

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1898
发表于 2024-4-13 02:23:38 | 显示全部楼层 |阅读模式
咱们论坛关于GMP的讨论和交流非常之多,其广度和深度在国内绝对是空前的。

我再加一帖,以增益其广度,教大家如何在android的apk应用里用上GMP。

1 前言。
在开始之前,我先解释一下几个问题。
1.1 GMP是C/C++库,android 的apk应用是java写的,这个跨语言的隔阂怎么解决?
java跑在虚拟机上,而虚拟机是原生的系统应用,java针对虚拟机提供有接口调用(JNI),可以让我们在java层与虚拟机之间互相通信,我们可以走这条路线。

1.2 android系统一般都是跑在ARM架构上,GMP莫非要编译成ARM版本的?     
  没错。通常都是在PC上编译成ARM平台的二进制,需要用到交叉编译工具链。这个你可以自己随便找一些第三方的toolchain,不过,我推荐大家使用 android NDK里的工具链。

2 一睹为快:
参考帖子:http://bbs.emath.ac.cn/thread-4855-2-1.html



3 环境准备
3.1 下载android的SDK,NDK
3.2 手机要能成功被adb连接
3.3 JDK, ant
3.4 swig 自动化接口生成和封装。 (当然,不用swig,你也可以用JDK自带的javah工具生成头文件,然后去写对应的C/C++实现。但这过程比较麻烦,很考验人。)

4 具体过程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

220

帖子

86

积分

关内侯

Rank: 2

积分
86
发表于 2024-4-13 02:24:34 | 显示全部楼层
GMP的ARM版本,你可以自己从源码编译,参考本论坛帖子:
http://bbs.emath.ac.cn/thread-5214-1-1.html

也可以拿别人编译好的二进制:
https://github.com/Rupan/gmp
回复

使用道具 举报

0

主题

200

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-4-13 02:25:33 | 显示全部楼层
改了下代码,做成用户交互版本的,截图效果已经在顶楼更新。

其中的求nextPrime 代码如下, 完整 的android工程代码可以在论坛QQ群下载。
(堆上的数据还没统一管理,如果用户频繁操作的话会是一个潜在的问题)
  1. char* nextPrime (const char *b) {       mpz_t next,c;   mpz_inits(next,c,'\0');   int status = mpz_set_str (c, b, 10);   if(status!=0)   {        mpz_set_str(next,"1",10);   }    mpz_nextprime(next,c);      size_t len = mpz_sizeinbase(next,10)+2;   char *buffer=(char*) malloc(len*sizeof(char));   mpz_get_str(buffer,10,next) ;      mpz_clears(next,c,'\0');   return buffer;    }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-12-5 03:21 , Processed in 0.072704 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表