1. 首页 > 科技

如何在麒麟系统中调用so读卡动态库? so 文件用什么打开

如何在麒麟系统中调用so读卡动态库?so 文件用什么打开

安卓手机如何打开.so文件?安卓手机有什么软件或者是方法可以打开.so文件的吗?不要用电脑,很麻烦

下个腾讯文件管理器试试

linux so文件怎么打开

你知道windows下的dll文件吗???

其实和linux下的so文件是一回事,,so文件也是编译好了的二进制的链接库文件,,,

一般来说都是c或c++编译出来的,,java的话通常是用的字节码,也就是class文件。。

你自己写一个 helloworld的c程序,然后在命令行下用编译器编译gcc -c helloworld.c -o hello.o这样编译出来的结果就是那样的东西了。。这样的文件是不能直接运行的。。

什么是SO文件

so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。

1、so文件就跟.dll文件差不多。

2、一般来说,so文件就是常说的动态链接库, 都是C或C++编译出来的。与Java比较它通常是用的Class文件(字节码)。

3、Linux下的so文件时不能直接运行的,一般来讲,.so文件称为共享库。

4、so文件使用方法

(1)动态库的编译。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。

命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 不用该标志外部程序无法连接。相当于一个可执行文件。

(2)动态库的链接

这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:

命令:$ gcc test.c -L. -ltest -o test

命令:$ ldd test执行test,可以看到它是如何调用动态库中的函数的。

如何加载so文件 android

android中加载so文件:

在Android中调用动态库文件(*.so)都是通过jni的方式,而且往往在apk或jar包中调用so文件时,都要将对应so文件打包进apk或jar包,工程目录下图:

Android中加载so文件的提供的API:

void System.load(String pathName);

说明:

1、pathName:文件名+文件路劲;

2、该方法调用成功后so文件中的导出函数都将插入的系统提供的一个映射表(类型Map);

3、具体代码如下:

try { 

            String localPath = Environment.getExternalStorageDirectory() + path; 

            Log.v(TAG, "LazyBandingLib localPath:" + localPath);

            String[] tokens = mPatterns.split(path); 

            if (null == tokens || tokens.length <= 0 

                    || tokens[tokens.length - 1] == "") { 

                Log.v(TAG, "非法的文件路径!"); 

                return -3; 

            } 

            // 开辟一个输入流 

            File inFile = new File(localPath); 

            // 判断需加载的文件是否存在 

            if (!inFile.exists()) { 

                // 下载远程驱动文件 

                Log.v(TAG, inFile.getAbsolutePath() + " is not fond!"); 

                return 1; 

            } 

            FileInputStream fis = new FileInputStream(inFile);

            File dir = context.getDir("libs", Context.MODE_PRIVATE); 

            // 获取驱动文件输出流 

            File soFile = new File(dir, tokens[tokens.length - 1]); 

            if (!soFile.exists()) { 

                Log.v(TAG, "### " + soFile.getAbsolutePath() + " is not exists"); 

                FileOutputStream fos = new FileOutputStream(soFile); 

                Log.v(TAG, "FileOutputStream:" + fos.toString() + ",tokens:" 

                        + tokens[tokens.length - 1]);

                // 字节数组输出流,写入到内存中(ram) 

                ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

                byte[] buffer = new byte[1024]; 

                int len = -1; 

                while ((len = fis.read(buffer)) != -1) { 

                    baos.write(buffer, 0, len); 

                } 

                // 从内存到写入到具体文件 

                fos.write(baos.toByteArray()); 

                // 关闭文件流 

                baos.close(); 

                fos.close(); 

            } 

            fis.close(); 

            Log.v(TAG, "### System.load start"); 

            // 加载外设驱动 

            System.load(soFile.getAbsolutePath()); 

            Log.v(TAG, "### System.load End");

            return 0;

        } catch (Exception e) { 

            Log.v(TAG, "Exception   " + e.getMessage()); 

            e.printStackTrace(); 

            return -1;

}