我试图创建一个C库,可以从Python的调用,到目前为止,我已经创建了公开(只有一个方法被添加为简单起见,模块信息和方法表中的代理C文件get_cycle_count
及其实施无关):
static PyMethodDef NESulator_methods[] = {
{"NESulator", get_cycle_count, METH_VARARGS, "Retrieves the current cycle count"},
{NULL, NULL, 0, NULL} /* Sentinel */
};
static struct PyModuleDef NESulator_module = {
PyModuleDef_HEAD_INIT,
"NESulator", /* name of module */
NULL, /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module,
or -1 if the module keeps state in global variables. */
NESulator_methods
};
/*
* Should this be called somewhere? Will the linker do something with this?
*/
PyMODINIT_FUNC PyInit_NESulator(void)
{
return PyModule_Create(&NESulator_module);
}
现在, 文件说,(显然)我的C库有以某种方式处理,这样Python才能真正导入。 只要创建一个C库,而不是通过CMake一个可执行文件(而克利翁,不VS所以编译器是MinGW的GCC)我已经得到了,但我找不到,也不知道我是如何suposed做,与CMake的。
这件作品的CMake的生成一个名为libNESulator.a
但没有dll
或lib
文件制作和.py
文件(在相同的位置.a
做时库)不能找到它import libNESulator
或import NESulator
后者是在定义的名称PyModuleDef
结构。 所以我敢肯定有东西丢失有
project(NESulator)
set(CMAKE_C_STANDARD 11)
add_subdirectory(src)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_library(NESulator "all of my .c files in the src directory previously included" )
target_link_libraries(NESulator ${PYTHON_LIBRARIES})
所以....是啊,你有什么想法如何把这一libNESulator.a
成一个Python可调用的模块? 我需要什么,在这个CMake的做做到这一点?
如果你有这样做或任何其他方式都更简单的方法,请随时提出它。 我是很新的CMake和Python的,所以我不知道,如果你需要我更多的信息,如该项目的结构左右,但请让我知道如果你这样做。
非常感谢