我真的不知道为什么当我在调试模式下运行时,链接器有时会 Select 自动搜索以‘d’或‘_d’为后缀的库.我正在try 在Windows中从C++调用python模块.我在Visual Studio 2022中创建了一个空白C++项目,并编写了以下代码:

#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <iostream>

int main()
{
    std::cout << "hello world";
}

我的计算机上安装了Anaconda3,C:\ProgramData\Anaconda3\include中有Python.h个生命,所以我将其添加到我的包含路径中.我的调试版本的输出是LNK1python39.lib cannot open file python39_d.lib.哎呀!我一定是忘了将链接器指向来自pythonAPI的静态库.但是等等!我在C:\ProgramData\Anaconda3\libs找到的只有python39.lib.Python 忘了把我的python39_d.lib文件寄给我了,因为某种原因,它会自动链接到这个文件.愚蠢的解决办法是复制并重命名副本,使其符合链接器的期望,但我宁愿只链接到非调试库.

但如何做到呢?是不是Python.h里面的#pragma导致了这一切?对于一个python发行版来说,发布一个没有变通方法就不能工作的API是一个残酷的把戏.或者是我不知道的某个晦涩难懂的Visual Studio设置?

推荐答案

这是经过精心设计的: 在pyconfig.h年内

ifdef MS_COREDLL
#       if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN)
                /* not building the core - must be an ext */
#               if defined(_MSC_VER)
                        /* So MSVC users need not specify the .lib
                        file in their Makefile (other compilers are
                        generally taken care of by distutils.) */
#                       if defined(_DEBUG)
#                               pragma comment(lib,"python39_d.lib")

Python相关问答推荐

try 在树叶 map 上应用覆盖磁贴

如何使用html从excel中提取条件格式规则列表?

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

如果条件不满足,我如何获得掩码的第一个索引并获得None?

将9个3x3矩阵按特定顺序排列成9x9矩阵

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

部分视图的DataFrame

如何在UserSerializer中添加显式字段?

Python列表不会在条件while循环中正确随机化'

如何指定列数据类型

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

如何在PySide/Qt QColumbnView中删除列

Python全局变量递归得到不同的结果

matplotlib图中的复杂箭头形状

OpenCV轮廓.很难找到给定图像的所需轮廓

使用__json__的 pyramid 在客户端返回意外格式

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

如何在Python中创建仅包含完整天数的月份的列表

多索引数据帧到标准索引DF

如果列包含空值,则PANAS查询不起作用