cmd/built-in.o: In function `do_serial_ft_userbd': /home/ljj/workspace/zs_pro/uboot-d2kv-54s-new-satellite/cmd/remote/serials.c:603: undefined reference to `lbc_bad_flash' aarch64-linux-gnu-ld.bfd: cmd/built-in.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against external symbol `lbc_bad_flash' can not be used when making a shared object; recompile with -fPIC /home/ljj/workspace/zs_pro/uboot-d2kv-54s-new-satellite/cmd/remote/serials.c:603: undefined reference to `lbc_bad_flash' make: *** [Makefile:1568:u-boot] 错误 1
时间: 2025-03-29 15:12:28 浏览: 71
### 解决链接错误问题
在处理 `aarch64-linux-gnu-ld` 链接器报错时,通常会遇到未定义引用 (`undefined reference`) 和重定位错误 (relocation errors) 的情况。以下是针对这些问题的具体分析和解决方案。
#### 1. **Undefined Reference 错误**
该类错误表明某些函数或变量未能被正确解析到目标文件中。具体来说:
- 报错信息显示 `/lib/aarch64-linux-gnu/libcairo.so.2` 中存在未定义的符号 `FT_Done_MM_Var`[^1]。
- 这可能是因为缺少必要的库文件或者这些库文件版本不匹配所致。
要解决此问题,可以尝试以下方法:
- 确认是否安装了 FreeType 库及其开发包(通常是 `freetype-dev` 或类似的名称)。如果没有,请通过包管理工具安装它们。
- 如果已经安装,则需验证当前使用的 Cairo 库是否与 FreeType 版本兼容。如果不兼容,重新编译 Cairo 并指定正确的依赖路径。
```bash
sudo apt-get install libfreetype6-dev
./configure --prefix=/usr/local --with-freetype=yes
make && make install
```
#### 2. **Relocation Error**
对于 `R_AARCH64_ADR_PREL_PG_HI21` 类型的重定位错误,这通常发生在静态链接共享对象时。原因可能是源码未启用位置无关代码 (-fPIC),从而导致无法生成适合动态加载的目标文件。
为了修复这一问题,建议采取如下措施:
- 编译所有模块时加入 `-fPIC` 参数以支持 PIC (Position Independent Code)[^2]。
```Makefile
CFLAGS += -fPIC
```
- 对于 U-Boot 构建过程中的特定配置项,确认其 Makefile 是否已设置适当选项来满足上述需求;如果尚未设定好,则手动调整相关参数后再执行构建命令。
#### 3. **lbc_bad_flash 符号缺失**
关于 `undefined reference to 'lbc_bad_flash'` 的提示,它暗示着某个自定义功能实现丢失或者是第三方插件集成失败的结果。检查项目源树里是否有对应的 C 文件实现了这个外部接口,并确保将其纳入最终可执行程序之中。
另外还需注意的是,在交叉编译环境下工作时,务必选用恰当的目标平台工具链并保持一致性的环境变量声明方式,比如 PATH、CC 及 AS 等。
---
### 提供一段示范代码用于测试目的
下面给出了一段简单的演示脚本来帮助排查此类问题:
```python
import ctypes
try:
cairo_lib = ctypes.CDLL("/lib/aarch64-linux-gnu/libcairo.so.2")
except OSError as e:
print(f"Failed loading library: {e}")
else:
try:
ft_func = getattr(cairo_lib, "FT_Done_MM_Var")
except AttributeError:
print("Symbol FT_Done_MM_Var not found.")
```
运行以上 Python 脚本可以帮助快速判断是否存在预期之外的行为表现。
---
阅读全文
相关推荐
















