sysroot为何物?

本文介绍链接过程中sysroot的作用。


sysroot为何物

做过交叉编译的同学们,一定对下面这个错误十分熟悉吧:

/cross-compiling/ld: cannot find crt1.o: No such file or directory
/cross-compiling/ld: cannot find crti.o: No such file or directory

在我们的pc上,这两个文件一般在/usr/lib或者/usr/lib32中,通过gcc -print-search-dirs可以看到这两个路径默认就在库的搜索路径中,所以在pc上编译程序时不存在链接器找不到crt1.ocrti.o的问题。

crt1.o负责应用程序的启动,其中包含了程序的入口函数_start以及两个未定义的符号__libc_start_mainmain,由_start负责调用__libc_start_main初始化libc,然后调用我们源代码中定义的main函数,crti.o负责辅助启动这些代码。

下面我们使用交叉编译工具链来查看库的搜索路径/cross-compiling/gcc -print-search-dirs,发现crt1.ocrti.o的所在目录并不在库的搜索路径中,所以会出现上述的问题。

下面就需要sysroot出场了。
sysroot被称为逻辑根目录,只在链接过程中起作用,作为交叉编译工具链搜索库文件的根路径,如配置--sysroot=dir,则dir作为逻辑根目录,链接器将在dir/usr/lib中搜索库文件。

只有链接器开启了–with-sysroot选项,–sysroot=director才生效

Reference


微信公众号同步更新,微信搜索"AnSwEr不是答案"或者扫描二维码,即可订阅。

在这里插入图片描述

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值