出现这一问题的原因是因为我们下载包已经定义了 INITERROR,导致在 leveldb_ext.cc 文件中会发现:
#define INITERROR return NULL
extern "C" PyObject* PyInit_leveldb(void)
#else
#define INITERROR return
extern "C" void initleveldb(void)
initleveldb 函数没有被宏定义,所以再看leveldb.def 文件,其中定义的前几行
LIBRARY "leveldb.pyd"
EXPORTS
initleveldb
leveldb_open
leveldb_close
显然,导出的函数是 initleveldb ,但这里显然没有定义,故编译不通过。
所以本人这里直接使用 PyInit_leveldb 函数,所以把 leveldb.def 的 initleveldb 直接替换为 PyInit_leveldb
LIBRARY "leveldb.pyd"
EXPORTS
PyInit_leveldb
leveldb_open
leveldb_close
,此后编译通过,产生pyd,python可以正常import。