Я пытаюсь создать библиотеку 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 (и CLion, а не VS, так что компилятор gcc из MinGW), но я не могу найти и понять, как я должен делать это с 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, поэтому я не знаю, нужна ли вам дополнительная информация от меня, например, о структуре проекта или около того, но, пожалуйста, дайте мне знать, если вы это сделаете.
Большое спасибо