Debian11下gcc编译C程序遇ld链接错误求助
编译C程序时遇到ld链接错误:.relr.dyn段类型未知
我写了一个简单的C程序:
int main(int argc, char *argv[]) { int a = 0; return 0; }
执行gcc test.c编译时,出现以下错误:
/usr/bin/ld: /lib/x86_64-linux-gnu/libc.so.6: type [0x13] unknown in the ".relr.dyn" section /usr/bin/ld: /lib/x86_64-linux-gnu/libc.so.6 ignored because incompatible when searching for /lib/x86_64-linux-gnu/libc.so.6 /usr/bin/ld: cannot find /lib/x86_64-linux-gnu/libc.so.6 /usr/bin/ld: /lib/x86_64-linux-gnu/libc.so.6: type [0x13] unknown in the ".relr.dyn" section /usr/bin/ld: /lib/x86_64-linux-gnu/libc.so.6 ignored because incompatible when searching for /lib/x86_64-linux-gnu/libc.so.6 /usr/bin/ld: /lib64/ld-linux-x86-64.so.2: type [0x13] unknown in the ".relr.dyn" section /usr/bin/ld: /lib64/ld-linux-x86-64.so.2 ignored because incompatible when searching for /lib64/ld-linux-x86-64.so.2 /usr/bin/ld: cannot find /lib64/ld-linux-x86-64.so.2 /usr/bin/ld: /lib64/ld-linux-x86-64.so.2: unknown type [0x13] in the ".relr.dyn" section /usr/bin/ld: /lib64/ld-linux-x86-64.so.2 ignored because incompatible when searching for /lib64/ld-linux-x86-64.so.2 collect2: error: ld returned 1 exit status
系统是Debian 11,求解决方法。
解决方法
这个错误源于ld(链接器)版本过旧,不支持.relr.dyn段——这是glibc 2.34及以上版本引入的新重定位格式,而Debian 11默认glibc版本为2.31,若系统glibc被升级但ld未同步更新,就会触发兼容性问题。以下是具体解决步骤:
检查版本匹配情况
执行命令确认ld和glibc版本:ld --version ldd --version若
ld版本低于2.35,而glibc版本高于2.31,即可确认是版本不兼容导致的问题。升级binutils包
Debian 11的backports仓库提供了更新版的binutils(包含ld),可通过以下步骤安装:- 添加backports源(未添加过的话):
echo "deb http://deb.debian.org/debian bullseye-backports main" | sudo tee /etc/apt/sources.list.d/bullseye-backports.list - 更新包列表并升级binutils:
sudo apt update sudo apt -t bullseye-backports install binutils
- 添加backports源(未添加过的话):
临时禁用新重定位格式
若无法升级binutils,可在编译时添加参数,让链接器不使用.relr.dyn段:gcc test.c -Wl,--no-relr修复系统库兼容性
若因错误升级glibc导致问题,可尝试重新安装对应版本的glibc包:sudo apt install --reinstall libc6 libc6-dev注意:操作前请备份重要数据,避免系统崩溃。
内容的提问来源于stack exchange,提问作者emerick biron
相关产品推荐
相关产品推荐

