makefile - 学习记录 2021/2/20

本文档介绍了如何通过在makefile中使用-Wl,-rpath.参数来解决链接动态库时遇到的‘libASN1.so: cannot open shared object file: No such file or directory’错误,重点讲解了-rpath选项的作用和应用实例。

研二


makefile

最近要重新学makefile了,记录以下每日所学。

  1. 当可执行文件链接动态库后在执行时,可能会出现这种错误:

test: error while loading shared libraries: libASN1.so: cannot open shared object file: No such file or directory

这种错误的原因是,虽然在编译时已链接了动态库,但在执行程序的时候,可执行文件依然需要寻找动态库。但由于在编译的时候并没有把动态库路径写入可执行文件,因此在这个阶段依然会发生找不到动态库的错误。
解决办法[1]:

test:
	gcc -I $(INCLUDE) -c OCSP.c 
	gcc OCSP.o -Wl,-rpath ./ -L. -o test -lASN1 

增加-Wl, -rpath ./

参考文献

[1] -rpath和-rpath-link: https://www.cnblogs.com/Malphite/p/10405465.html

### 解决 `scripts/kconfig/conf --syncconfig` 和 Makefile 自动化过程中的错误 当执行命令 `(Q)$(MAKE) -f $(srctree)/Makefile syncconfig` 时,主要目的是检查并更新 `scripts/kconfig/conf` 文件,随后调用该文件来同步配置[^1]。 #### 错误处理机制分析 如果在同步配置的过程中遇到错误,通常会涉及以下几个方面: - **脚本路径或权限问题**:确保所有相关脚本具有可执行权限,并且路径设置正确。 - **依赖关系缺失**:确认所有必要的工具和库已安装。例如,在某些情况下可能需要特定版本的 `sed` 或其他文本处理工具。 - **输入文件损坏**:`.config` 文件或其他源文件可能存在语法错误或不兼容项。这可能导致解析失败。 对于自动清理 `auto.conf` 文件的操作,可以从以下角度考虑: ```bash rm -rf include/config/auto.conf touch include/config/auto.conf ``` 这段简单的 shell 命令可以用来删除旧版的 `auto.conf` 并创建一个新的空白文件作为替代方案。这样做有助于排除因残留数据引起的问题。 #### 失败原因及解决方案 常见失败原因及其对应措施如下表所示: | 可能的原因 | 推荐的解决方法 | | --- | --- | | `.config` 文件格式不对 | 使用默认模板重新生成初始配置;也可以尝试手动编辑修复明显的格式错误 | | 缺少必需环境变量定义 | 设置好所需的环境变量,特别是那些指向内核树根目录 (`srctree`) 的变量 | | 版本冲突 | 更新到最新的稳定分支或者回退至之前工作正常的提交记录 | 此外,还可以通过增加调试信息的方式来定位具体位置发生的异常情况。比如修改 `cmd_autoconf` 宏定义以便打印更多中间状态输出: ```makefile cmd_autoconf = \ (set -x; sed -n -f ./tools/scripts/define2mk.sed u-boot.cfg | \ while read line; do \ if [ -n "$$line" ] && ! grep -q "$${line%=*}=" include/config/auto.conf; then \ echo "Adding new config item: $line"; \ echo "$line"; \ fi \ done > include/autoconf.mk) ``` 这样可以在每次添加新的配置条目时显示相应的提示消息,从而更容易追踪潜在的问题所在。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值