CMake FindPython奇怪之处:MSVC没有链接CMake指示链接的库

2024-09-26 18:14:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试我的cmake python扩展设置实用程序,遇到了一个我自己似乎无法解决的奇怪行为

本质上,我的CMakeLists.txt可以归结为两行:

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
...
Python3_add_library (${TARGET} SHARED ${SRCS})

当我尝试在调试模式下构建时,MSVC 2019抛出一个链接器错误:

LINK : fatal error LNK1104: cannot open file 'python37_d.lib'

我正在使用conda,我知道我的电脑上没有调试库。所以,我开始四处寻找,看看是否可以绕过它:主要是为了链接到发布库,python37.lib

this stackoverflow post的帮助下,我打印了所有目标属性并找到了相关条目:

mymath LINK_LIBRARIES = Python3::Python

指示使用导入的目标FindPython3配置。因此,我也打印了它的属性,并发现:

Python3::Python IMPORTED_IMPLIB = C:/Users/tikum/miniconda3/libs/python37.lib

感到困惑的是,我查看了build目录中相应的.vcxproj,发现

<ImportLibrary>
C:/Users/tikum/Documents/Python/python-cmaketools-cpython-example/build/src/cpython_example/mymath/Debug/mymath.lib
</ImportLibrary>

所以,我完全没有找到任何链接到python37_d.lib的痕迹。。。有人能告诉我这里发生了什么事吗

另外,我试图编译的示例C代码是我在网上找到的Martino Pilia示例的逐行副本


Tags: build示例目标属性链接exampleliblink
1条回答
网友
1楼 · 发布于 2024-09-26 18:14:55

您必须取消定义DEBUG或_DEBUG,我不记得了,在代码中包含python.h,因为python与pragma指令链接。所以这与cmake无关

像这样的

#ifdef DEBUG
#undef DEBUG
#include <Python.h>
#define DEBUG
#else
#include <Python.h>
#endif

我们应该这样做

相关问题 更多 >

    热门问题