交叉编译时--sysroot,-rpath,-rpath-link,-L之间的关系与注意点

本文详细解释了在进行交叉编译时遇到notfound错误的常见原因,重点讲解了sysroot的作用以及如何正确设置rpath和rpath-link参数以确保动态库的查找。

使用场景

在进行交叉编译的时候,出现 “not found (try using -rpath or -rpath-link)” 错误,可能是由于没有设置sysroot,而使用了rpath进行运行库的搜索路径指定,导致在链接的时候找不到对应的动态库。可以使用rpath-link来替代rpath参数。

一、使用说明

  • -l 就是表示添加需要链接的库文件,如果没有用后缀指明动态库还是静态库,则优先使用动态库。
  • -L 就是添加链接库的搜索目录,可以看成是为-l服务的。
  • --sysroot = dir 将dir作为逻辑root目录,用于搜索头文件和依赖库文件,例如--sysroot=/home/build,那么如果之前默认去/usr/lib下面去搜索依赖库,则在sysroot的作用下会定位到/home/build/usr/lib目录下进行搜索。这个参数在交叉编译的时候会影响到rpath,如果没有设置这个sysroot,则rpath在编译阶段是不起作用的
  • -rpath = dir 这个参数在编译可执行文件的时候,用来指定运行库的搜索目录,该目录会被记录在elf可执行文件中。与此同时在链接阶段,也可以兼职-rpath-link的功能,作为编译时动态库的搜索路径。但是如果启用了该参数,-L参数就会失效。在交叉编译环境中,该参数需要同sysroot共同作用,如没有sysroot则该参数会部分失效,无法将dir添加进链接库的搜索路径列表中,最终导致“ not found (try using -rpath or -rpath-link)” 错误提示。
  • -rpath-link 这个参数类似rpath,提供运行库的搜索路径,但是该参数只是在链接阶段起作用,不会被写入elf文件中。

 二、官方手册

  1. -l 的解释

    larchive

    --library=archive

    Add archive file archive to the list of files to link. This option may be used any number of times. ld will search its path-list for occurrences of libarchive.a for every archive specified. On systems which support shared libraries, ld may also search for libraries with extensions other than .a. Specifically, on ELF and SunOS systems, ld will search a directory for a library with an extension of .so before searching for one with an extension of .a. By c

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值