so文件的使用
来源:互联网 发布:电商网络销售是做什么 编辑:程序博客网 时间:2024/05/01 07:22
现在我需要的是能够先生成一个invoked.so文件,然后再用上面的方法生成一个invoke.so文件,最后供我的Android工程调用,请问具体步骤,我使用了以下两种方式都不成功:
第一种为:
我的Android工程叫AndroidLinuxSOJNI,新建一个Activity类:com.hxf.linuxinvoke.LinuxSO
package com.hxf.linuxinvoke;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class LinuxSO extends Activity {
public native int del(int x,int y);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.loadLibrary("linux");
TextView tv = new TextView(this);
LinuxSO ls = new LinuxSO();
int del = ls.del(111, 12);
tv.setText("调用成功否,相减的值为:" + del);
setContentView(tv);
}
}
然后在E:\android-ndk-1.5_r1\sources\samples\linuxSO下面建立文件com_hxf_linuxinvoke_LinuxSO.c、com_hxf_linuxinvoke_LinuxSO.h、hello.c、hello.h首先用cygwin将hello.c、hello.h打包成libhello.so,然后在调用libhello.so打包com_hxf_linuxinvoke_LinuxSO.c、com_hxf_linuxinvoke_LinuxSO.h,打包命令如下:
gcc -c hello.c
ar cru hello.a hello.o
ranlib hello.a
gcc -shared hello.o -o libhello.so
/****打包com_hxf_linuxinvoke_LinuxSO为.SO文件供Android调用***/
gcc -c com_hxf_linuxinvoke_LinuxSO.c
ar cru com_hxf_linuxinvoke_LinuxSO.a com_hxf_linuxinvoke_LinuxSO.o
ranlib com_hxf_linuxinvoke_LinuxSO.a
gcc -shared libhello.so com_hxf_linuxinvoke_LinuxSO.o -o liblinux.so
生成了我所需要的liblinuxSO.so,将其拷贝到Android的工程下的libs文件夹下面,使用上面的方式调用,发现动态库无法加载(??难道Android的make APP方式打包得到的.SO文件和我用cygwin打包得到的.SO文件不一样?也不知道怎么调试跟踪,希望了解如何跟踪调试加载动态库失败的朋友也帮忙指点指点)
我的第二种方式是:
在E:\android-ndk-1.5_r1\sources\samples\linuxSO下面建立文件com_hxf_linuxinvoke_LinuxSO.c、com_hxf_linuxinvoke_LinuxSO.h、hello.c、hello.h,Android.mk文件中的内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := linuxSO
LOCAL_SRC_FILES := com_hxf_linuxinvoke_LinuxSO.c
include $(BUILD_SHARED_LIBRARY)
在E:\android-ndk-1.5_r1\apps\linuxSO下面的内容为:
APP_PROJECT_PATH := $(call my-dir)
APP_MODULES := linuxSO
然后进入到E:\android-ndk-1.5_r1,在cygwin中使用make APP=linuxSO命令出现如下错误:
out\apps\linuxSO\android-1.5-arm\objs\linuxSO/com_hxf_linuxinvoke_LinuxSO.o:In function ‘Java_com_hxf_linuxinvoke_LinuxSO_del’: sources\samples\linuxSO\com_hxf_linuxinvoke_LinuxSO.c:10:undefined reference to ‘sum’
out/apps/li其中的sum是我在hello.c中的一个方法,也就是我无法找到libhello.so,请教请教各位高手,如何才能够实现调用已经有的.SO文件,然后生成供Android使用的.SO文件,万分感谢!
有人说我
的so文件是host用的,应该是target用的才可以。
so文件分为host和target用的吗?
那么我如何才能够实现编写target的SO文件呢,请问有什么帮助文档,或者是具体的步骤是怎么样的呢,可以按照我的第一种方式还是第二种方式实现呢,感谢!
转自:http://www.eoeandroid.com/thread-37807-1-1.html
- so文件的使用
- 简单的使用so文件
- gcc生成.so文件及.so文件的使用
- 使用自己定义的so文件
- 使用不同版本的 so 文件
- 使用反编译后的so文件
- 如何调用已有的SO文件来生成供Android使用的SO文件
- 使用realm的时候在so文件冲突,读取不到32位so文件解决
- so文件的编译
- linux的.so文件
- Linux下的动态链接库.so文件的使用
- Linux下的动态链接库.so文件的使用
- Linux下的动态链接库.so文件的使用
- Linux下的动态链接库.so文件的使用
- Linux动态链接库.so文件的创建与使用
- Linux动态链接库.so文件的创建与使用
- Linux动态链接库.so文件的创建与使用
- Linux动态链接库.so文件的创建与使用
- 最大子矩阵(poj1050)
- txt文本导入SqlServer数据库
- MapReduce执行过程
- 做一个心如止水的程序员
- awk一种内存溢出的解决
- so文件的使用
- Flash Player 11异步解码Bitmap
- 编程之美3.1字符串移位包含的问题的扩展问题
- 上海牌手表,狗屎一般的质量和服务
- OCR识别引擎tesseract使用方法
- LoadString失败
- vc 录制和发送音频并保存wav文件
- 今日之所学····
- 警告: 隐式声明与内建函数 ‘exit’ 不兼容 解决方案