![使用 make 需要哪些软件包?](https://linux22.com/image/46540/%E4%BD%BF%E7%94%A8%20make%20%E9%9C%80%E8%A6%81%E5%93%AA%E4%BA%9B%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
我尝试在虚拟机(32 位内核)内的新 debian wheezy 上编译一个包:
cd /tmp/
wget https://github.com/freifunk-gluon/batman-adv-legacy/archive/master.zip
rm -Rf batman-adv-legacy-master
unzip master.zip
cd /tmp/batman-adv-legacy-master/
make
make install
但我得到了错误
/bin/sh: 1: cd: can't cd to /lib/modules/3.2.0-4-686-pae/build
Makefile:35: /lib/modules/3.2.0-4-686-pae/build is missing, please set KERNELPATH
/tmp/batman-adv-legacy-master/gen-compat-autoconf.sh /tmp/batman-adv-legacy-master/compat-autoconf.h
make -C /lib/modules/3.2.0-4-686-pae/build M=/tmp/batman-adv-legacy-master PWD=/tmp/batman-adv-legacy-master modules
make: *** /lib/modules/3.2.0-4-686-pae/build: No such file or directory. Stop.
我也尝试过:
cd /lib/modules/$(uname -r)/
ln -s /usr/src/batman-adv-2013.4.0/ build
cd -
但后来我得到了错误
gen-compat-autoconf.sh /tmp/batman-adv-legacy-master/compat-autoconf.h
make -C /lib/modules/3.2.0-4-686-pae/build M=/tmp/batman-adv-legacy-master PWD=/tmp/batman-adv-legacy-master modules
make[1]: Entering directory `/usr/src/batman-adv-2013.4.0'
make[1]: *** No rule to make target `modules'. Stop.
make[1]: Leaving directory `/usr/src/batman-adv-2013.4.0'
我想我丢失了一些包裹,但是是哪一个呢?
答案1
您必须安装适合您的内核版本的 linux 头文件包。对元包尝试如下操作:
# apt-get install linux-headers-686-pae
在我的系统(amd64)上,您可以看到已安装的标头包如何引入build
您缺少的目录:
$ dpkg -L linux-headers-3.2.0-4-amd64 | grep ^/lib/modules
/lib/modules
/lib/modules/3.2.0-4-amd64
/lib/modules/3.2.0-4-amd64/source
/lib/modules/3.2.0-4-amd64/build
我应该补充一点,这特别适合您的情况,因为您正在尝试编译内核模块。一般来说,您将需要(除了make
本身和适当语言的编译器之外)程序依赖项的头包。在 Debian 中,这些通常位于名称类似于<project>-dev
.
答案2
build-essential
您将需要用于在 debian 中编译软件包的软件包。只需在终端中执行即可:
sudo apt-get install build-essential
这还将安装一些编译所需的其他软件包(例如 gcc)。这应该可以解决你的问题。