在Windows中将dll与Python链接。 CMake:对`_imp__PyModule_Create2'的未定义引用

时间:2018-10-10 13:13:05

标签: python c cmake mingw python-c-api

Linking C module with Python 3.7. CMake in Windows开始,我试图从C库创建一个Python模块。我现在遇到另一个问题,因此我决定自己创建一个新问题:)

接下来的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文件,并且在链接{{1}时失败}文件。

所以这是我在编译的最后一步中遇到的错误:

.dll

当我在初始化Python模块的函数中注释此行时,错误消失了

[ 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 3.7 32位。 MinGW也为32位(不是VS编译器),CLion和(可能不相关的)W10 x64。

我想念什么?相同的CMake文件足以在C中使用Python解释器,因此在某一时刻它找到了库。有任何想法吗?您需要我提供更多信息吗?

非常感谢

0 个答案:

没有答案