1.什么是so共享库?
so共享库就是一个函数库
2.so共享库没有main函数
写一个so的代码如下,编译后就变成.so文件了
int max(int a,int b){ if(a>b) return a; else return b; } int add(int a,int b){ return a+b; }
3.java调用so库
public class Hello{ public native static int add(int x,int y); //java 代码中声明 native 方法 static { System.load("/home/lance/main.so"); //以绝对路径加载so文件 } public static void main(String[] args){ System.out.println(add(1,1)); } }
4.has text relocation 出现的原因是so库没有使用PIC编译,不是位置无关代码
so库的一个关键目的是为了使多个进程共享内存中的同一份代码,节约内存资源。
如何做到呢?
1.预先为每一个so库指定好加载的地址范围,然后要求加载器总是将so库加载至指定的位置。这种方法简单但会产生一些严重的问题。一个进程没有用到某个库,相应的地址范围依然会被保留下来,内存使用效率很低。管理也困难。我们必须保证预留的地址块之间没有重叠。每当一个库被修改后,我们还必须要保证它能被放回到修改前的位置,否则,我们还要为它重新找一个新的位置。当我们创建一个新的库时,我们还要为它寻找合适的空间,地址空间碎片化造成的大量无用的内存空洞。更糟糕的是,不同的系统为动态库分配内存的方式不尽相同,这使得管理起来更为困难。
2.将动态库编译成可以在任意位置加载而无需链接器进行修改。这样的代码被称作位置无关代码(PIC)。GNU编译系统可以通过指定-fPIC选项来生成PIC代码。
相关推荐
解决低版本串口so文件出现has text relocation的问题,通过修改源码的方式,重新编译新的so文件,亲测可以在Android6.0以上运行使用,并且支持v7a、x86等通用版本
gcc编译PPC指令集代码时候可能遇到的问题,vxWorks loadModule也可能遇到的问题。
理解gcc编译下的共享库,知道编译与反编译内存地址的情况。
U-Boot relocation and Debug The relocation on arm is working, before u-boot-2010.09,there are two define CONFIG_SKIP_RELOCATE_UBOOT and CONFIG_SKIP_LOWLEVEL_INIT, when they are defined in your board ...
Ubuntu20.04 小企鹅输入法动态库, 使用QT版本5.9.0,尽可能的根据博客自己封装为好
Documentation for how to relocation image in ROM or RAM. 针对飞思卡尔M52259板子资源重新定位。
Sensor Relocation in Mobile Sensor Networks(移动传感器网络的传感器搬迁) Guiling Wang, Guohong Cao, Tom La Porta, and Wensheng Zhang Department of Computer Science & Engineering The Pennsylvania ...
该子资源用于修复ubuntu 系统启动的时候,出现relocation error:/lib/x86_64-linux/libgnutls.so.30:symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference...
boost的linux静态库版本,添加了-fPIC选项,一般的boost静态库没有此选项,动态库在调用的时候会报下面的内容,用了这个库就不会出了(网上教的编译方法都是针对1.55版本的,后面的版本代码都不一样): /usr/bin/...
Lenovo X3650 M5 安装 ESXi-5.5.0u3 报错failed to resolve circular relocation-附件资源
无须积分直接下载。建立多目标优化模型,通过遗传算法解决科罗拉多河域的水电分配问题。借助AHP和TOPSIS分析确定因素间的公平系数,并给出资源短缺下的分配建议。
基于oster(2019)的无工具变量法解决内生性问题,目前已得到学者的广泛采用 。 Across a Few Prohibitive Miles: The Im pact of the Anti-Poverty Relocation Prog ram in China The impact of regulation on ...
实例分析可重定位文件中符合的解析定位过程。初学实例易于理解。
在64位下编译GD 如果/usr/bin/ld: /usr/local/lib/libz.a(compress.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC 这说明zlib没用用-...
matlab精度检验代码ML_AE_relocation 使用机器学习(ML)方法在实验室断层表面上重新定位声发射(AE)事件。 参考: Zhao,Q.,Glaser,SD通过机器学习来重新定位具有未知速度结构的岩石中的声发射。 Rock Mech Rock...
libcurl.a静态库(.a文件) android可用,包含(armeabi、x86、arm64-v8a、x86_64) 。基于 curl-7.61.1编译。
linux下比较好的播放yuv文件的播放器,经过本人实测效果不错,能播放从usb摄像头获取的yuv视频流。
搬迁 重定位与一起管理模式,灯箱,警报和叠加。