今天在编译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++
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环境的。
参考: