发现问题:
今天在 OpenWRT 上增加了个 package, 编译的时候,报出如下错误:
Package test_modules is missing dependencies for the following libraries:
libcrypto.so.1.0.0
libssl.so.1.0.0
分析问题:
在编译目录及最终输出目录都是可以找到这两个文件的,那为什么会出现这个问题呢?
既然有上面的提示,那么就找一下这个提示从哪来吧:
# shujun@server in ~/OpenWRT [16:21:20] [/dev/pts/9]
$ grep -rn "missing dependencies for the following libraries" .
./include/package-ipkg.mk:74: echo "Package $(1) is missing dependencies for the following libraries:" >&2; \
来看一下这个文件的 74 行:./include/package-ipkg.mk
上面这段脚本的功能是:
- 删除 $(1).missing 文件,这个文件存在即代表有不满足的依赖
- 调用 ./scripts/gen-dependencies.sh 生成依赖,动作是 gen-dependencies.sh 会扫描 package里面所有的可执行文件,并将这些文件通过 readelf 和 objcopy 命令将它们所需要的依赖库都提取出来,结果是一个个的 so 文件名