假如 xmkmf 和/或者 make 没有错误而通过了,你可能要继续到下一个章节, 无论如何,然而,在 "真实生活"里,很少事情在第一次就操作正确,这样可以测试你的足智多谋了。
假设 make 失败有个链接错误: -lX11: No such file or directory,正好在 xmkmf 之后已被调用,这可能意味着
Imake 不能被完全建立。检查第一部分 Makefile 文件的的行是这样 :
LIB= -L/usr/X11/lib
INCLUDE= -I/usr/X11/include/X11
LIBS= -lX11 -lc -lm
这个 -L 和 -I 开关告诉编译器和链接分别在哪里找到 library 和 include 文件。在这个例子里, X11 库应该在 /usr/X11/lib
目录,且 X11 包含文件应该在 /usr/X11/include/X11 目录里。假如对于你的机器上的这个错误,请处理修改 Makefile
并重新再 make。
/tmp/cca011551.o(.text+0x11): undefined reference to `cos'
要修复它,需要明确链接到匹配的库,在 Makefile (看先前的例子) 里增加一个 -lm 到 LIB 或
LIBS 标记 。
make -DUseInstalled -I/usr/X386/lib/X11/config
这个直接方式的类别相当于 xmkmf 。
# ldconfig 更新共享库链接符号。这可能不是必须的。
是 libX11.so.6.1。解决方法是用 root 运行
ln -s /usr/X11R6/lib/libX11.so.6.1
/usr/X11R6/lib/libX11.so.6 ,接着需要运行 ldconfig 。
#!/usr/local/bin/perl
如 Perl 的实际安装位置是在你的 /usr/bin 目录,用一个 /usr/local/bin 替代,这个脚本不能运行有两个方法来纠正。文件头改成
#!/usr/bin/perl, ,或增加一个链接符, ln -s /usr/bin/perl /usr/local/bin/perl
。
当一个包构建需要的库不在你的系统里,它将产生一个链接错误(没声明涉及错误)。这个库可能是专有或找到其他原因是困难的。在这个事例里,获得一个包的作者的静态链接库
或从来自一个 Linux 使用团体可能是最容易的实现修复的两种方法。
注意glibc 版本有一些不同,所以一个二进制在 glibc 2.1 构建的,可能不能用glibc 2.0 代替而工作。
警告: 一个程序 root 的 setuid 可能会给你的系统造成一个安全问题。这个程序运行有 root 权限且因而存在潜在的损害。确保你知道什么程序这样做可靠,在设置 setuid 位之前尽可能查看源码。
你可能希望调查 Makefile 为你的系统调用的某些最佳编译选项。一个例子,设置 -O2 标记选择优化的最高级别和 -fomit-frame-pointer 标记来制作最小的二进制(尽管调试没被关闭)。除非你知道你正在做的,否则在任何时候,无论如何不要尝试去 构建 试验的操作。
在我的经验里, 25% 以上的应用程序构建"完全没有问题"。另外的50% 在经过努力修正细节能被 "劝说" 的构建。这个包的重要数字表示仍然意味着有不能完全成功被构建。即使这样, 这些 Intel ELF 和/或 a.out 二进制也可能在 Sunsite 和 TSX-11 archiv 找到。 Red Hat 和 Debian 有大量的大多数流行的Linux 软件,作为预先编译好的二进制存档。或许软件的作者能提供为你特殊机器编译的二进制。
注意如果你获取编译好的二进制,你需要检查是否和你的系统兼容:
二进制能在你的硬件上运行(也就是 Intel x86)。
二进制必须和你的内核兼容(也就是 a.out 或 ELF)。
假如所有的都失败了,你可能要在合适的新闻组去寻找帮助,比如 comp.os.linux.x 或 comp.os.linux.development 。
如果所有的操作都没问题,至少在它上面花费最大的努力,而且你学到了很多。