如何让gdb使用自定义编译glibc对应的动态链接器?
GDB调试自定义编译glibc程序的配置方法
你遇到的报错本质是GDB默认优先调用系统路径下的运行时链接器,无法识别你自定义glibc新增的SHIM版本符号,可通过以下方案解决:
方案1:GDB交互界面内临时配置
启动GDB加载目标程序后,先执行两条配置命令再运行程序即可:
- 执行
gdb ./my_test进入GDB交互界面 - 执行
set solib-absolute-prefix /local/home/me/glibc-build/:指定GDB优先从你的自定义glibc构建目录加载动态链接库,而非系统默认路径 - 执行
set interp-system-prefix /local/home/me/glibc-build/:强制GDB调用你自定义路径下的运行时链接器,绕过系统默认的/lib64/ld-linux-x86-64.so.2 - 执行
run启动程序即可正常调试
方案2:命令行一键启动免配置
如果不想每次进入GDB都手动输入配置,可以直接把配置参数写在启动命令里:
gdb -ex 'set solib-absolute-prefix /local/home/me/glibc-build/' -ex 'set interp-system-prefix /local/home/me/glibc-build/' --args ./my_test
备选兼容方案
如果上述方案在你的环境下不生效,可以临时设置动态库搜索环境变量再启动GDB:
LD_LIBRARY_PATH=/local/home/me/glibc-build/ gdb ./my_test
注意该方案优先级低于GDB内部参数,存在和系统其他动态库冲突的风险,优先使用前两种方案。
你之前尝试的gdb --args /local/home/me/glibc-build/ld-linux-x86-64.so.2 ./my_test无效的原因是:GDB还是会默认从系统路径解析运行时链接器自身依赖的glibc库,依然会触发版本符号校验失败的问题。
内容的提问来源于stack exchange,提问作者IRatherStayPrivate
相关产品推荐
相关产品推荐

