readelf elf文件格式分析
ARTS-Week-6
第六周
- Alogrithm:Container With Most Water
- Reading:Static Libraries vs. Dynamic Libraries
- Tech:ELF目标文件与readelf
- Share:TIMELAPSE OF THE FUTURE: A Journey to the End of Time
[一天一个命令]ldd
ldd用于查看程序运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。
示例:查看test程序运行所依赖的库:
1 | ~/work/test/Test/build $ ldd example |
第一列:程序需要依赖什么库
第二列: 系统提供的与程序需要的库所对应的库
第三列:库加载的开始地址
通过上面的信息,我们可以得到以下几个信息:
- 通过对比第一列和第二列,我们可以分析程序需要依赖的库和系统实际提供的,是否相匹配
- 通过观察第三列,我们可以知道在当前的库中的符号在对应的进程的地址空间中的开始位置
如果依赖的某个库找不到,通过这个命令可以迅速定位问题所在;
Linux平台交叉编译树莓派代码入门
前言
理论上编译是直接在使用的设备上连接各种库编译会很方便,但在树莓派上或许会遇到一些问题:
- VNC、SSH延迟可能特别大,尤其远程连入执行指令缓慢到你觉得你的板子可能在月球上
- 比在PC和服务器上更长的编译时间和编译过程中由于资源消耗造成的树莓派使用卡顿
- 直接在树莓派上编译需要连接显示器、键盘、Ethernet等外设,有可能由于位置原因、硬件接口被去除或者集成在其他系统里导致无法连接外设
- 树莓派无法联网,有时候只能烧入tf卡加载
- 部署版本中没有GUI等等
为了解决这些问题,可以考虑直接在一台Linux的PC或者服务器上编译好代码之后拷贝到嵌入式环境中使用。而由于嵌入式环境使用的指令集不一样,所以需要使用交叉编译工具链完成编译。
Review - gRPC Design and Implementation
本周文章是一个2016年的slide,gRPC Design and Implementation
gRPC介绍
gRPC源自Google内部RPC项目Stubby。Stubby这个项目支撑了谷歌内部所有的应用和系统,Google云中全平台百亿次每秒的请求量,提供了C++,Java,Python和Go的API,但是因为和内部工具紧密结合所以并不适合开源。这个项目为后面的开源积累了伸缩性、性能和API经验。