欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > ubuntu18.4主机下,交叉编译过程中在ar汇编阶段找不到某个库的解决

ubuntu18.4主机下,交叉编译过程中在ar汇编阶段找不到某个库的解决

2024/10/26 16:03:13 来源:https://blog.csdn.net/JISIC/article/details/143184263  浏览:    关键词:ubuntu18.4主机下,交叉编译过程中在ar汇编阶段找不到某个库的解决

编译的时候报错提示找不到这个文件或者目录:

排查步骤:

1.用ldd命令检查该as汇编器执行的时候依赖的库

ldd命令用于显示一个可执行文件所依赖的共享库(.so 文件)。它会列出该文件在运行时需要加载的所有动态库,以及这些库的具体路径

通过ldd命令查看得知,该汇编器在执行汇编的时候依赖libz.so.1,但是却找不到

2.然后用find命令查找该库,这个库是不是真的不存在 

通过diff命令比较结果出现的三个同名的库,前两个是一样的,但是第三个不一样。依据buildroot编译的某些特性来判断,我觉得应该是staging_dir目录下那个库是对的,因为我的交叉编译器mips-linux-gcc就是在这个目录的子目录里,所以ar汇编器依赖的动态库应该是这个。

然后对这个库的属性信息检查,可以确定该库格式正常,权限正常,说明库本身没有问题。只是编译器找不到

PS:如果全局都搜不到这个库,那么需要先自己下载

3.检查环境变量是否设置正确

我们知道,在编译的时候他会从系统默认的库路径去寻找,比如/usr/lib,/usr/local/lib/这些,我的交叉编译器是外部安装的,不属于ubuntu系统里自带的,所以需要手动去指定交叉编译器的库路径,设置库路径的系统变量名为LD_LIBRARY_PATH,你需要找到报错缺失的那个库在哪个目录下,然后在~/.bashrc或/etc/bash.bashrc或/etc/profile里指定库路径,如下图

你也可以同时指定STAGING_DIR和PATH这些系统环境变量的路径,记得设置完之后要source一下刚修改的文件让环境变量生效,然后用echo $LD_LIBRARY_PATH查看是否生效,如果没有生效,可以关掉当前终端重新打开再看下。

4.使用 sudo ldconfig 命令更新库缓存

如果前面两步都设置对了,但是再次编译的时候还是提示找不到那个库,可以用sudo ldconfig更新库缓存。因为在一些情况下,LD_LIBRARY_PATH 的设置可能不足以让链接器找到库文件 

其他说明:由于我的ubuntu是64位,x86_64架构的,但是我使用的交叉编译器是针对32位,mips架构的机器,所以需要安装一些库用来支持32位程序的编译,比如libc6-dev:i386 libncurses5-dev:i386 libstdc++6:i386等等,编译的时候他会自动去寻找必要的依赖库,如果找不到编译就会立即停止,然后报错说找不到,这个情况下大部分的找不到的库都可以通过在命令行直接下载安装,有的如果无法通过命令行直接下载到,可以尝试换源,或者更换ubuntu的软件包管理器为Snap,或者在网上搜这个包手动下载,然后再将其解压并安装到ubuntu里

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com