什么是SO文件?
SO文件格式即ELF文件格式,它是Linux下可执行文件,共享库文件和目标文件的统一格式。
根据看待ELF文件的不同方式,ELF文件可以分为链接视图和装载视图。链接视图是链接器从链接的角度看待静态的ELF文件。
从链接视图看ELF文件,ELF文件由多个section组成,不同的section拥有不同的名称,权限。而装载视图是操作系统从加载ELF文件到内存的角度看待动态的ELF文件。
从装载视图看ELF文件,ELF文件由多个segment,每一个segment都拥有不同的权限,名称。实际上,一个segment是对多个具有相同权限的section的集合。
扩展资料:
由于Android操作系统的底层基于Linux系统,所以SO文件可以运行在Android平台上。Android系统也同样开放了C/C++接口供开发者开发Native程序。
由于基于虚拟机的编程语言JAVA更容易被人反编译,因此越来越多的应用将其中的核心代码以C/C++为编程语言,并且以SO文件的形式供上层JAVA代码调用,以保证安全性。
而ELF头表记录了ELF文件的基本信息,包括魔数,目标文件类型(可执行文件,共享库文件或者目标文件),文件的目标体系结构,程序入口地址(共享库文件为此值为0),然后是section表大小和数目,程序头表的大小和数目,分别对应的是链接视图和装载视图。
linux系统下编译的文件在windows下能运行吗?
理论上说Linux系统编译的文件是不能在Windows系统上执行的,因为Windows系统没有Linux程序执行所依赖的.so和.a文件,.so和.a文件是Linux系统上的共享库文件,Windows系统上也没有Linux程序需要的系统调用(系统调用相当于Windows系统的API的概念),不同操作系统的二进制文件是不能通用的。但是现在情况有些不一样了,新版的Windows10提供了WSL(是Windows Subsystem for Linux的缩写),可以在Windows 10系统中运行Ubuntu、Fedora、SUSE Linux,其实就是个子系统,在子系统内可以运行Linux程序,主要是为了吸引Linux的开发者用户的。
linux Jni调用so文件建了测试WebProject写了一个servlet执行调用,一启动tomcat jvm崩溃了,错误日志如下?
建议你在linux底下编译so加-g选项,然后gdb java,进去以后可以b c函数名来设置断点,单步调试。或者生成core文件 ,再gdb java core看看崩溃堆栈上下文。推荐第一种方式。
Linux系统下.ko文件是什么文件。so文件是什么文件?
.so文件是动态链接库文件,相当于win下的.dll文件。.ko是内核模块文件,是内核加载的某个模块,一般是驱动程序。