编译的时候报错提示找不到这个文件或者目录:
排查步骤:
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里