自行编译的AVR GCC 7.5.0无法工作:ld提示找不到-lm和-lc
确认是否遗漏安装avr-libc:AVR的
libc、libm属于avr-libc项目,并非gcc自带。按照你参考的指南流程,需在编译完binutils和基础gcc(仅C编译器)后,先安装avr-libc,再完成gcc的完整编译。如果跳过这一步,工具链自然找不到标准库。下载与gcc 7.5.0兼容的avr-libc版本(建议匹配同期版本,如avr-libc 2.0.0),执行以下步骤安装:./configure --prefix=/home/tuser/local/avr --host=avr make make install检查gcc编译阶段的顺序与参数:旧版AVR工具链编译必须遵循
binutils → 基础gcc → avr-libc → 完整gcc的顺序。如果直接编译完整gcc而未先安装avr-libc,gcc无法链接到目标平台的标准库。重新编译gcc时,确保配置参数包含:./configure --prefix=/home/tuser/local/avr --target=avr --enable-languages=c --disable-libssp --disable-nls --disable-shared验证库文件是否存在:检查
/home/tuser/local/avr/avr/lib/目录下是否有libc.a、libm.a文件。如果不存在,说明avr-libc安装失败,需排查其编译过程中的错误(比如是否未将binutils的avr-*工具加入PATH)。手动指定库路径测试:执行编译命令时手动添加库路径,验证是否为路径配置问题:
avr-gcc test.c -o test -L/home/tuser/local/avr/avr/lib若成功,说明gcc默认库路径未正确指向avr-libc的安装目录,可检查gcc编译时是否添加了
--with-sysroot=/home/tuser/local/avr参数,或修改avr-gcc的默认搜索路径配置。检查版本兼容性:binutils 2.39属于较新版本,可能与2019年发布的gcc 7.5.0存在兼容性问题。可尝试降级binutils到与gcc 7.5.0同期的版本(如binutils 2.32),重新编译工具链。
内容的提问来源于stack exchange,提问作者Britton Kerin

