Справочная информация заключается в том, что я хочу реализовать свой собственный объект HashMap с помощью pyhton для расширения C.
Но когда я закончил 'hashmap.c' и использовал distutils 'для компиляциикак модуль, я обнаружил, что что-то не так с 'неопределенной ссылкой на _Py_GC_generation0'.
'_ Py_GC_generation0' указан в 'objimpl.h', код которого показан ниже:
typedef union _gc_head {
struct {
union _gc_head *gc_next;
union _gc_head *gc_prev;
Py_ssize_t gc_refs;
} gc;
double dummy; /* force worst-case alignment */
} PyGC_Head;
extern PyGC_Head *_PyGC_generation0;
'_PyGC_generation0 'на самом деле определен в' gcmodule.c ', код показан ниже:
static struct gc_generation generations[NUM_GENERATIONS] = {
/* PyGC_Head, threshold, count */
{{{GEN_HEAD(0), GEN_HEAD(0), 0}}, 700, 0},
{{{GEN_HEAD(1), GEN_HEAD(1), 0}}, 10, 0},
{{{GEN_HEAD(2), GEN_HEAD(2), 0}}, 10, 0},
};
PyGC_Head *_PyGC_generation0 = GEN_HEAD(0);
Я пытался собрать с помощью' python3.lib 'и' python36.lib ', но это не сработало. все еще сообщил об ошибке «неопределенная ссылка на _Py_GC_generation0»
Вот мой код для сборки модуля (путь правильный):
from distutils.core import setup, Extension
hashmap = Extension('hashmap',
libraries=['python3', 'python36'],
library_dirs = ['E:\\python3.6.6'],
sources = ['hashmap.c']
)
setup(
name = 'C extension module',
version = '1.0',
description = 'hashmap',
ext_modules = [hashmap])
Спасибо всем!