[TOC]
背景
在編譯安裝軟件時(shí)候, 經(jīng)常會(huì)遇到某個(gè) .h 文件找不到的報(bào)錯(cuò), 例如:
致命錯(cuò)誤:mysql.h:沒(méi)有那個(gè)文件或目錄
這種原因, 一般是 系統(tǒng)的$LD_LIBRARY_PATH目錄下找不到對(duì)應(yīng)的文件, 這里就是找不到 mysql.h, 這時(shí)候一般可以通過(guò)安裝軟件包(rpm或deb)解決. 但是我們?nèi)绾沃滥膫€(gè)軟件包, 包含這個(gè)文件呢? 這里有一些命令可以幫的上忙.
處理方案
RedHat/CentOS
可以通過(guò)yum provides命令查找
yum provides "*/文件名"
注意: 根據(jù)yum provides 文檔, 我們必須使用在文件前面使用通配符*/代表文件前面的路徑.
例如:
yum provides "*/mysql.h"
結(jié)果:
1:mariadb-devel-5.5.68-1.el7.i686 : Files for development of MariaDB/MySQL applications
Repo : base
Matched from:
Filename : /usr/include/mysql/mysql.h
1:mariadb-devel-5.5.68-1.el7.x86_64 : Files for development of MariaDB/MySQL applications
Repo : base
Matched from:
Filename : /usr/include/mysql/mysql.h
Ubuntu/Debian
# 更新本地庫(kù)
apt-file update
# 搜索文件所屬 dep 文件
apt-file search "文件名"
PS: 如果遇到 Command 'apt-file' not found, 先安裝apt-file
apt install -y apt-file
例如:
apt-file update
apt-file search "mysql.h"
得到:
pike7.8-reference: /usr/share/doc/pike7.8-doc/html/reference/ex/predef_3A_3A/Sql/mysql.html
pike8.0-doc: /usr/share/doc/pike8.0-doc/html/reference/ex/predef_3A_3A/Mysql/mysql.html
pike8.0-doc: /usr/share/doc/pike8.0-doc/html/reference/ex/predef_3A_3A/Sql/mysql.html
python-azure-doc: /usr/share/doc/python-azure/html/ref/azure.mgmt.rdbms.mysql.html
python-sqlalchemy-doc: /usr/share/doc/python-sqlalchemy-doc/html/dialects/mysql.html
libgearman-doc: /usr/share/doc/libgearman-doc/html/gearmand/queues/mysql.html
libmariadb-dev: /usr/include/mariadb/mysql.h
libmariadbclient-dev: /usr/include/mysql/mysql.h
libmariadbclient-dev: /usr/include/mysql/private/probes_mysql.h
libmysqlclient-dev: /usr/include/mysql/mysql.h
libodb-mysql-dev: /usr/include/odb/mysql/mysql.hxx
有時(shí)候覺(jué)得結(jié)果有些文件名根本不對(duì), 可以增加grep命令篩選結(jié)果:
apt-file search "mysql.h" | grep -E '/mysql.h$'
得到:
libmariadb-dev: /usr/include/mariadb/mysql.h
libmariadbclient-dev: /usr/include/mysql/mysql.h
libmariadbclient-dev: /usr/include/mysql/private/probes_mysql.h
libmysqlclient-dev: /usr/include/mysql/mysql.h