zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux - Ubuntu中运行编译或其他任务时提示找不到文件或程序

Linux文件Ubuntu程序 运行 编译 任务 提示
2023-09-11 14:22:09 时间
今天在编译Ingenic x2000(北京君正的MIPS架构芯片)的Linux BSP时,出现了个错误:
scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory
这是因为Ubuntu系统中少安装了一个package,安装一下就好了:
$sudo apt install libssl-dev
在出现这个问题之前,编译这个BSP还提示找不到gcc,没有C++11的编译选项,所以就安装了GCC和G++:
$sudo apt install gcc
$sudo apt install g++
这种情况就是,提示什么缺失,就直接按照提示进行安装即可。
一般这种情况,如果提示缺少某个命令,可以在命令行里尝试运行这个命令,如果失败,就会出现提示你要安装那个包,比如我后面操作还出现的错误,提示找不到mkimage和cmake:
make[2]: mkimage: Command not found
$ mkimage
Command 'mkimage' not found, but can be installed with:
sudo apt install u-boot-tools
$sudo apt install u-boot-tools
/bin/sh: 1: cmake: not found
$ cmake
Command 'cmake' not found, but can be installed with:
sudo apt install cmake
$ sudo apt install cmake
但能否直接找到这个命令、程序或文件是属于哪个package呢?
比如一个程序cmd_xxx:
$dpkg -S $(which cmd_xxx)
或者上面提示的找不到的头文件:
$ dpkg -S openssl/bio.h
libssl-dev:amd64: /usr/include/openssl/bio.h
也可以使用apt-file:
$sudo apt install apt-file
$sudo apt-file update
$ apt-file search /usr/include/openssl/bio.h
libssl-dev: /usr/include/openssl/bio.h    
上面apt-file命令,使用search和find都可以。
查看某个package里包含的文件,即使没有安装:
$apt-file list packagename
在之前文章也有关于包管理的说明:
dpkg -L packname
找出某个已安装包都安装了哪些文件,并给出路径。
dpkg -L apache-perl
dpkg -L perl
dpkg - c xyz.deb
dpkg --contents xyz.deb
显示出这个包中将要安装的文件,即这个包的内容。
dpkg -c dc_1.06-19_i386.deb
dpkg -S /path/to/file
找出这个文件所属的包
dpkg -S /bin/netstat
dpkg -S /sbing/ippool
还有另外一种方法, 就是在Ubuntu网站里查:
还有一些其他命令可用:
1. apt-cache
apt-cache search name
2. dpkg-query
* dpkg-query --list 'pattern*' lists all packages that have not been purged
* dpkg-query --search 'pattern*' searches for individual files installed
3. apt search
显示以安装的包:
apt search transmission | grep installed
4, 使用command_not_found_handle来查找命令。
$ command_not_found_handle cmake
Command 'cmake' is available in the following places
* /bin/cmake
* /usr/bin/cmake
cmake: command not found
因为我用的开发环境是Ubuntu 20.04,上面这些都是适用于Debian和Ubuntu环境的。
参考: