-void nmem_reset(NMEM n);
-void *nmem_malloc(NMEM n, int size);
-int nmem_total(NMEM n);
-NMEM nmem_create(void);
-void nmem_destroy(NMEM n);
+YAZ_EXPORT void nmem_reset(NMEM n);
+YAZ_EXPORT void *nmem_malloc(NMEM n, int size);
+YAZ_EXPORT int nmem_total(NMEM n);
+YAZ_EXPORT char *nmem_strdup (NMEM mem, const char *src);
+
+#if NMEM_DEBUG
+
+YAZ_EXPORT NMEM nmem_create_f(const char *file, int line);
+YAZ_EXPORT void nmem_destroy_f(const char *file, int line, NMEM n);
+#define nmem_create() nmem_create_f(__FILE__, __LINE__)
+#define nmem_destroy(x) nmem_destroy_f(__FILE__, __LINE__, (x))
+
+#else
+
+YAZ_EXPORT NMEM nmem_create(void);
+YAZ_EXPORT void nmem_destroy(NMEM n);
+
+#endif
+
+YAZ_EXPORT void nmem_init (void);
+YAZ_EXPORT void nmem_exit (void);
+#ifdef __cplusplus
+}
+#endif