大家好,
请问,有谁用NDK编译开源库并用Android App(java)调用测试过的?网上关于这方面的资料好少,都是分析那几个sample。NDK本身目的就是为了使用开源库的,但是很难找到这方面的资料。要么就是只能找到如何编译得到so的。有谁有这方面的经验?我现在试着编译了几个开源库,基本都失败了。现在jpeg编译得到了so,但是调用也是失败。NDK的资料真的很难找啊!求助。
谢谢。
请问,有谁用NDK编译开源库并用Android App(java)调用测试过的?网上关于这方面的资料好少,都是分析那几个sample。NDK本身目的就是为了使用开源库的,但是很难找到这方面的资料。要么就是只能找到如何编译得到so的。有谁有这方面的经验?我现在试着编译了几个开源库,基本都失败了。现在jpeg编译得到了so,但是调用也是失败。NDK的资料真的很难找啊!求助。
谢谢。
解决方案 »
- 拍照怎样实现滤镜就是不同场景的效果?
- android系统的编译
- 请问谷歌地图在表面添加标注是什么原理??
- Android开发 strings.xml里面定义了两个array,获取第二个以后会报错
- 如何动态变化菜单的标题与图像?
- android的UI界面开发工具
- 有没有用户行为分析平台介绍
- android 两工程共用sharedpreferences 解决方法
- 新建项目无法调试
- andorid thread使用sleep方法遇到的问题.
- 无法安装ADT Cannot complete the install because of a conflicting dependency
- android应用中如何识别是X86芯片和arm芯片
P.S:NDK不是一个c++编译器,NDK是提供了一些工具而已,包含了交叉编译链,使用的是arm-gcc来编译链接。
int Java_com_hello_jpeg_JpegActivity_foo(JNIEnv* env, jobject thiz)
{
char* filename = "/mnt/sdcard/test.jpg";
FILE * infile;
struct jpeg_decompress_struct cinfo;
if ((infile = fopen(filename, "rb")) == NULL) {
// fprintf(stderr, "can't open %s\n", filename);
return -1;
} jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, infile);
(void) jpeg_read_header(&cinfo, TRUE);
....
注释掉(void) jpeg_read_header(&cinfo, TRUE);就可以运行,说明不是JNI的写法什么的问题。加上之后运行崩溃。具体说吧,就是一堆的logcat,网上有很多类似的,“signal 11 (SIGSEGV), fault addr 00000000“,从搜索的来看,都是跟内存资源有关。但是网上的那些都是很简单的情况,比如把C里面的指针返回给Java等引起的,没找到使用开源库的例子。
谁有使用开源库的经验没有啊?个人觉得很多第三方库都会涉及到内存分配,我怀疑是跟Android虚拟机和内存分配之间的问题。但是,NDK本身就是为了重用开源库,如果这个问题都搞不定,那还有什么用?莫非就是用来写那几个sample的。。
强调一下我问的重点,不是如何使用NDK工具,也不是如何写JNI,而是使用NDK结合开源库在Android中使用。谢谢。我知道这方面经验的人实在是少(网上资料甚少)还是希望能运气好遇到高手。
楼主看下上面的做法一般开源项目都会说本项目的编译方法的吧
谁有实际的使用开源库在Android的经验,随便什么库,ffmpeg,libjpeg,libpng都行。我现在又编译了一下zlib(这个库android自带,但是我还是自己编译试试了),编译成功。调用getversion的函数也正确了。但是上面那个libjpeg真正使用就有问题,我怀疑跟内存的东西有关。我很想知道,这些开源库到底能不能实际在Android中用。
我相信jpeg的问题也是一样的,有时间我再回头去测试libjpeg,相信可以搞定,至于ffmpeg,也会去测试一下的。
谢谢大家的回复!
结贴!
我是生成了libpng.so文件了但是我不晓得为什么连接这个so文件总是连接不上。