Berkeley DB:“make install”在 Linux 上失败

Posted

技术标签:

【中文标题】Berkeley DB:“make install”在 Linux 上失败【英文标题】:Berkeley DB: "make install" fails on Linux 【发布时间】:2020-11-06 00:09:03 【问题描述】:

我正在尝试在我的虚拟机 (Linux-Ubuntu) 上安装 Berkeley DB 18.1.40(C++ 版本)。

当我执行sudo make install 时,我遇到以下错误消息:

Installing DB include files: /usr/local/BerkeleyDB.18.1/include ...
Installing DB library: /usr/local/BerkeleyDB.18.1/lib ...
libtool: install: cp -p .libs/libdb-18.1.so /usr/local/BerkeleyDB.18.1/lib/libdb-18.1.so
libtool: install: cp -p .libs/libdb-18.1.lai /usr/local/BerkeleyDB.18.1/lib/libdb-18.1.la
libtool: install: cp -p .libs/libdb-18.1.a /usr/local/BerkeleyDB.18.1/lib/libdb-18.1.a
libtool: install: chmod 644 /usr/local/BerkeleyDB.18.1/lib/libdb-18.1.a
libtool: install: ranlib /usr/local/BerkeleyDB.18.1/lib/libdb-18.1.a
libtool: install: cp -p libdb.a /usr/local/BerkeleyDB.18.1/lib/libdb.a
libtool: install: chmod 644 /usr/local/BerkeleyDB.18.1/lib/libdb.a
libtool: install: ranlib /usr/local/BerkeleyDB.18.1/lib/libdb.a
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin" ldconfig -n /usr/local/BerkeleyDB.18.1/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/BerkeleyDB.18.1/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Installing DB utilities: /usr/local/BerkeleyDB.18.1/bin ...
libtool: install: cp -p .libs/db_archive /usr/local/BerkeleyDB.18.1/bin/db_archive
libtool: install: cp -p .libs/db_checkpoint /usr/local/BerkeleyDB.18.1/bin/db_checkpoint
libtool: install: cp -p .libs/db_convert /usr/local/BerkeleyDB.18.1/bin/db_convert
libtool: install: cp -p .libs/db_deadlock /usr/local/BerkeleyDB.18.1/bin/db_deadlock
libtool: install: cp -p .libs/db_dump /usr/local/BerkeleyDB.18.1/bin/db_dump
libtool: install: cp -p .libs/db_hotbackup /usr/local/BerkeleyDB.18.1/bin/db_hotbackup
libtool: install: cp -p .libs/db_load /usr/local/BerkeleyDB.18.1/bin/db_load
libtool: install: cp -p .libs/db_log_verify /usr/local/BerkeleyDB.18.1/bin/db_log_verify
libtool: install: cp -p .libs/db_printlog /usr/local/BerkeleyDB.18.1/bin/db_printlog
libtool: install: cp -p .libs/db_recover /usr/local/BerkeleyDB.18.1/bin/db_recover
libtool: install: cp -p .libs/db_replicate /usr/local/BerkeleyDB.18.1/bin/db_replicate
libtool: install: cp -p .libs/db_stat /usr/local/BerkeleyDB.18.1/bin/db_stat
libtool: install: cp -p .libs/db_tuner /usr/local/BerkeleyDB.18.1/bin/db_tuner
libtool: install: cp -p .libs/db_upgrade /usr/local/BerkeleyDB.18.1/bin/db_upgrade
libtool: install: cp -p .libs/db_verify /usr/local/BerkeleyDB.18.1/bin/db_verify
Installing documentation: /usr/local/BerkeleyDB.18.1/docs ...
cp: cannot stat 'bdb-sql': No such file or directory
cp: cannot stat 'gsg_db_server': No such file or directory
Makefile:1307: recipe for target 'install_docs' failed
make: *** [install_docs] Error 1

我很困惑为什么会提示这个错误,因为安装手册中没有提到bdb-sqlgsg_db_server

有谁知道如何修复这些错误?

感谢您的帮助!

【问题讨论】:

我也遇到了这个问题,这可能是一个管理问题而不是开发问题。一种方法可能是通过添加配置标志、降级或修改源来构建缺少的组件,以修复 libdb 的这个明显错误。 【参考方案1】:

正如@fuzzyTew 所说,这似乎是 18.1.40 的一个错误,但由于它仅限于文档,它应该足够安全,可以自己修补。有两种简单的方法可以做到这一点。到目前为止,更容易的是在docs 目录中创建它想要的目录,使用mkdir db-18.1.40/docs/bdb-sql db-18.1.40/docs/gsg_db_server 轻松完成。这将在您的文档文件夹中留下一对随机的空目录,但即使在使用它们的文档本身中我也找不到任何引用,因此它应该足够安全。或者,您可以在运行configure 后使用sed -i.bak -e 's: bdb-sql : :' -e 's: gsg_db_server : :' Makefile 将它们从Makefile 中删除。就个人而言,我更喜欢只制作空目录,因为它几乎不可能出错。

【讨论】:

【参考方案2】:

这似乎是 libdb 18.1.40 的一个错误,应报告给 Oracle。版本 18.1.32 位于https://download.oracle.com/otn/berkeley-db/db-18.1.32.tar.gz

【讨论】:

【参考方案3】:

根据其他答案,我发现对我来说最好的解决方案是将丢失的目录从 18.1.32 复制到我的 18.1.40 源中:

tar -xzvf db-18.1.32.tar.gz
tar -xzvf db-18.1.40.tar.gz
cp -rp db-18.1.32/docs/bdb-sql db-18.1.40/docs/
cp -rp db-18.1.32/docs/gsg_db_server db-18.1.40/docs/

这样您就可以两全其美...您不必降级到 32,而且您可以获得文档而不是空的文档文件夹。显然,这些文档是针对旧版本的,可能不是 100% 正确,但在 IMO 中它们总比没有好。

【讨论】:

以上是关于Berkeley DB:“make install”在 Linux 上失败的主要内容,如果未能解决你的问题,请参考以下文章

Berkeley DB为啥又叫做db4

在 Berkeley DB Core 和 Berkeley DB JE 之间进行选择

berkeley-db-je 的最新版本是啥?

我可以使用 oracle berkeley db java edition 的 c 实现(python bsddb)创建的 bdb(berkeley db)文件吗?

berkeley db java edition怎样存储数据库?

[转] berkeley db aosa阅读