注意第一个命令前面的./。当你键入一个命令的时候,shell会在你的路径里查找文件。它不从当前目录开始查找,因此如果./(代表当前目录)没有在路径里,虽然ls看的见这个文件,但是shell却找不到。shell能执行make是因为它通常都在/usr/bin里,而/usr.bin在路径里。要看路径,如下执行:
echo $PATH [Enter]
如果出现错误:不能编译的最常见错误原因是找不到文件。几乎所有的程序都靠有些程序,文件或库的支持。如果它们找不到,程序就不能编译。README/INSTALL文件应该告诉编译这个程序所需要哪些文件,和这些文件的版本。注意:错误的版本会象根本没有这个文件一样让你不能编译。通常,你要知道是不是这个问题可以从编译程序输出结尾的错误信息中得知,这些信息将告诉你找不到什么文件。注意:有时你有这些文件,但是它们不在Makefile文件所指明的地方。使用linux的发布安装程序,例如rpm,来检查你是否丢失了某些文件。如果没有这些文件的话,去找它,如果有,并且版本正确,检查Makefile文件看看它要求这个文件放在什么地方。例如:moc文件在/usr/local/bin里,但是Makefile说:moc=/opt/bin/moc。编辑一下Makefile(用vi或者任何什么文本编辑器)然后改一下moc的路径即可。
另一个常见的错误是丢掉了"include"的文件。很多程序的中的原文件的头几行是这样的:
#include #include #include #include
这些"h"文件(或者叫头文件)必须存在于你的计算机里。最少你应该有内核的头文件,使用ls /usr/include/linux查看。如果你安装了一些库,象gtk,确定也安装了它们的开发文件。有时同一个库的几个版本可能导致一些问题,每个版本可能把它的头文件放在不同的地方,可你并不知道编译的时候使用的到底是哪个文件。
如果你改变了Makefile中的所有应该改变的地方,并且所有的库和头文件都对,而它仍然不能编译,那么顺序如下做:
1、如果你是从一个和这个程序的主站不同的另外一个站点下载的这个程序,那么去它的主站看看有没有更新的版本可以使用。
2、去dejanews.com这个站点,搜索一下这个程序。这里很可能有其他人遇到了同样的问题,并且已经贴出来了解决方法。
3、如果所有的方法都不行的话,email给作者。很多作者对改进他们的程序以及bug报告和性能建议都很有兴趣,通常都会被很好的接受(记注:这是linux,不是商业软件。)注意:你的bug报告最好多说些关键的情况,不要只说一句"这个程序不能编译"!我通常是email过去编译结果的最后十行或更多行,这样作者才能看到是那里出现的错误。如果我真的喜欢这个程序,我会在下一个新版本发布以后尽可能给作者游泳的反馈。注意,程序员也是人——他们会有两个星期的休假、跳槽、搬家等等其他十五,因此不要期望能够立即得到回复。最后,有些程序有唯一的编译设置:马上能想到的有qt和内核,我再最后重复一遍:读README和INSTALL文件。