R16应用程序库依赖问题解
一. 主机ubuntu系统查库依赖: 通过ldd 命令查找,(没有路径,只有地址的表示已经加载到内存了)
二. 主机查找交叉编译的程序库依赖: 通过交叉编译程序arm-openwrt-linux-readelf -d xxx-elf-file
这个方法有两个缺点 1. 只能看到直接依赖的库文件,有些库还依赖其他的库看不到,必须再次 readelf了 2. 在真正实际运行的时候,这些库不一定真正存在。 三. 小机Tina系统查找库依赖: 目前tina没有ldd 命令脚本,我们通过连接器ld-musl-armhf.so.1直接查找 ld-musl-armhf.so.1 –list xxx-elf-file
四. 如果找不到库咋办? 比如我们把libsmartlinkd_client.so 删除后,就会出现下如下情况,运行就会出现问题
使用 ld-musl-armhf.so.1 同样出现找不的问题。
解决对策: 1. 缺失库–添加对应的库, 放入目录 /lib 2. 库存在,位置不对–可以通过-rpath=指定路径来解决
3. 库存在,位置不对–可以通过LD_LIBRARY_PATH的环境变量来解决。 修改/etc/profile 增加 LD_LIBRARY_PATH=/usr/ethan:$LD_LIBRARY_PATH 然后测试和 运行就是OK的。