我需要编译旧的 Apache 版本 1.3,编译过程失败,因为:
mod_auth_dbm.c:77:18: fatal error: ndbm.h: File or directory not found
这个ndbm.h文件在哪里?
答案1
答案2
这里的文件(Fedora 18)属于gdbm-devel
,包含它的 Ubuntu 包应该以类似的方式命名。检查源的依赖关系,您可能需要与每个依赖关系相对应的一系列-devel
包。
你需要一个过时的 apache 来做什么,而且它还存在已知的漏洞?为什么发行版的 apache 不工作?移植任何需要 apache 前进的东西可能比陷入史前时期要好得多......
答案3
gdbm 源代码将头文件放在/usr/include/gdbm
.一些打包系统(例如 Arch Linux)放置了指向这些目录的符号链接(因此/usr/include/ndbm.h
指向/usr/include/gdbm/ndbm.h
),而至少一些基于 Debian 的系统省略了目录并重命名ndbm.h
为gdbm-ndbm.h
(因此它们具有gdbm.h
、dbm.h
和gdbm-ndbm.h
)。
我认为这是为了避免与不同的包发生冲突,但这是一个糟糕的解决方案。
解决此类问题的一种方法(特别是如果您没有修改系统目录的权限)是创建您自己的目录,例如 compat,放入从 到 的链接compat/ndbm.h
,/usr/include/gdbm-ndbm.h
然后告诉编译器搜索您的 compat 目录(-Icompat
)。然后,如果它在系统库中找不到该文件,它将在您自己的目录中找到正确的名称。
答案4
自 Debian 10 和 Ubuntu 18.04(可能更早,但这是此软件包支持的最旧版本)开始,相关文件可在libgdbm-compat-dev
:
apt install libgdbm-compat-dev