左旋异构

Something interesting

第六周

  • 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用于查看程序运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。

示例:查看test程序运行所依赖的库:

1
2
3
4
5
6
7
8
~/work/test/Test/build $ ldd example
linux-vdso.so.1 => (0x00007ffe71d28000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd8c9d88000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd8c9a81000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd8c977f000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd8c9569000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd8c919c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd8c9fa4000)

第一列:程序需要依赖什么库
第二列: 系统提供的与程序需要的库所对应的库
第三列:库加载的开始地址

通过上面的信息,我们可以得到以下几个信息:

  1. 通过对比第一列和第二列,我们可以分析程序需要依赖的库和系统实际提供的,是否相匹配
  2. 通过观察第三列,我们可以知道在当前的库中的符号在对应的进程的地址空间中的开始位置
    如果依赖的某个库找不到,通过这个命令可以迅速定位问题所在;

Internet meme

网络迷因(英语:Internet meme),是指一夕间在互联网上被大量宣传及转播,一举成为备受注目的事物。

我觉得网络迷因包含着好多有趣的梗,所以记录一下。

阅读全文 »

前言

理论上编译是直接在使用的设备上连接各种库编译会很方便,但在树莓派上或许会遇到一些问题:

  • VNC、SSH延迟可能特别大,尤其远程连入执行指令缓慢到你觉得你的板子可能在月球上
  • 比在PC和服务器上更长的编译时间和编译过程中由于资源消耗造成的树莓派使用卡顿
  • 直接在树莓派上编译需要连接显示器、键盘、Ethernet等外设,有可能由于位置原因、硬件接口被去除或者集成在其他系统里导致无法连接外设
  • 树莓派无法联网,有时候只能烧入tf卡加载
  • 部署版本中没有GUI等等

为了解决这些问题,可以考虑直接在一台Linux的PC或者服务器上编译好代码之后拷贝到嵌入式环境中使用。而由于嵌入式环境使用的指令集不一样,所以需要使用交叉编译工具链完成编译。

阅读全文 »

本周文章是一个2016年的slide,gRPC Design and Implementation

gRPC介绍

gRPC源自Google内部RPC项目Stubby。Stubby这个项目支撑了谷歌内部所有的应用和系统,Google云中全平台百亿次每秒的请求量,提供了C++,Java,Python和Go的API,但是因为和内部工具紧密结合所以并不适合开源。这个项目为后面的开源积累了伸缩性、性能和API经验。

阅读全文 »
0%