New submission from Chi Hsuan Yen: In setup.py, _dbm links to gdbm_compat only. If gdbm is built as dynamic libraries, libgdbm_compat.so has a NEEDED flag for libgdbm.so, so both symbols in libgdbm and libgdbm_compat can be used. However, as static libraries does not provide such a flag, importing _dbm raises ImportError:
shell@ASUS_Z00E_2:/data/local/tmp $ python3.7m -c 'import _dbm' Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: dlopen failed: cannot locate symbol "gdbm_errno" referenced by "/data/local/tmp/python3/usr/lib/python3.7/lib-dynload/_dbm.cpython-37m.so"... gdbm_errno is a symbol in libgdbm.a. gdbm manual [1] suggests linking to both libraries, too. [1] http://www.gnu.org.ua/software/gdbm/manual/html_node/Compatibility.html ---------- components: Build files: gdbm.patch keywords: patch messages: 286907 nosy: Chi Hsuan Yen priority: normal severity: normal status: open title: _dbm requires -lgdbm if gdbm is built as static libraries type: compile error versions: Python 3.6, Python 3.7 Added file: http://bugs.python.org/file46507/gdbm.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29440> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com