Связывание DLL с Python в Windows.Cmake: неопределенная ссылка на `_imp__PyModule_Create2 ' - PullRequest
0 голосов
/ 10 октября 2018

Исходя из Связывание модуля C с Python 3.7.CMake в Windows Я пытаюсь создать модуль Python из библиотеки C.Сейчас я сталкиваюсь с другой проблемой, поэтому я решил создать новый вопрос сам по себе :)

Следующий фрагмент CMake сгенерирует мне .a файл

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")

target_link_libraries(NESulator ${PYTHON_LIBRARIES})

, которыйэто не то, что нужно Python для принятия и импорта модуля.Это должен быть .dll, поэтому я добавил ключевое слово SHARED в эту строку add_library(NESulator SHARED "all of my .c files " ), и теперь он создает файл .dll.a и завершается ошибкой при связывании файла .dll.

Вот ошибка, которую я получаю на последнем этапе компиляции:

[ 92%] Building C object src/CMakeFiles/NESulator.dir/gui/python_gui_wrapper.c.obj
[100%] Linking C shared library libNESulator.dll
CMakeFiles\NESulator.dir/objects.a(python_gui_wrapper.c.obj): In function PyInit_NESulator:
/src/gui/python_gui_wrapper.c:21: undefined reference to `_imp__PyModule_Create2'
collect2.exe: error: ld returned 1 exit status
src\CMakeFiles\NESulator.dir\build.make:278: recipe for target 'src/libNESulator.dll' failed
mingw32-make.exe[3]: *** [src/libNESulator.dll] Error 1
CMakeFiles\Makefile2:89: recipe for target 'src/CMakeFiles/NESulator.dir/all' failed

И ошибка исчезает, когда я комментирую эту строку внутри функции, которая инициализирует модуль Python

PyMODINIT_FUNC PyInit_NESulator(void)
{
    return PyModule_Create(&NESulator_module);
}

Но, конечно, мне это нужно!поэтому я не могу просто проигнорировать это.

Для вашей информации, я использую Python 3.7 32 бита.MinGW 32 бит (не компилятор VS), CLion и (вероятно, не имеет значения) W10 x64.

Чего мне не хватает?Одного и того же файла CMake было достаточно, чтобы использовать интерпретатор Python в C, так что в какой-то момент он нашел библиотеки.Есть идеи?Вам нужно больше информации от меня?

Большое спасибо

...