Quanah Gibson-Mount writes: [About name clashes with MDB Tools] > The only place I can think this could cause an issue would be Debian (and > then Ubuntu). They load all library symbols into a shared address space > used by every user, including root. This has caused me endless nightmare > in the past with conflicting symbols between my own LDAP libraries and the > debian system libraries when thinks like nss_ldap were in use (loading the > system libraries).
mdb_open and mdb_close are the name clashes I see without asking the compiler (I'd need to install glib). We could rename those to mdb_dbi_<open/close>. Perhaps combined with the compat macros below: My reasons for preferring a full rename had little to with MDB tools. If you'd have done that if not for compat issues: A transition isn't hard, merely ugly. Something like this at the *beginning* of lmdb.h - or in lmdb_compat.h, which lmdb.h includes #if (LMDB_COMPAT_2012): #if (LMDB_COMPAT_2012) /* "2012" to distinguish from future compat macros */ /* First, symbols needing only source-level compat */ # define MDB_NOSUBDIR LMDB_NOSUBDIR # ... /* Next, binary compat. External names, types+enums for debuggers. */ # if (LMDB_COMPAT_2012) > 0 /* Old source file vs. new liblmdb library */ # define mdb_open lmdb_open /* Not mdb_open(...). "&mdb_open" would fail. */ # ... # else /* (LMDB_COMPAT_2012) < 0: New source file vs. old libmdb library */ # define lmdb_open mdb_open /* turns later lmdb_open() decl into mdb_open */ # ... # endif #endif /* LMDB_COMPAT_2012 */ /* Then the "real" lmdb.h */ #define MDB_NOSUBDIR 0x4000 ... int lmdb_open(/*...*/); ... For that matter, an optionally installed mdb.h could do #ifndef LMDB_COMPAT_2012 # define LMDB_COMPAT_2012 1 #endif #include "lmdb.h" I'm not going to be terribly disappointed if this hack is turned down:-) -- Hallvard