首页 > 编程问答 >在窗口中尝试 pybind11:对 __imp_PyGILState_Check 的未定义引用

在窗口中尝试 pybind11:对 __imp_PyGILState_Check 的未定义引用

时间:2024-07-30 04:53:56浏览次数:15  
标签:python c++ pybind11

我正在尝试让 pybind11 在 Windows 中工作。我已经使用 conda-forge 安装了 pybind11,然后执行最简单的代码:

#include "pybind11/pybind11.h"

namespace py = pybind11;

用 :

g++ -std=c++17 -O2 -mavx -IC:/Users/beng_/anaconda3/Lib/site-packages/pybind11/include -IC:/Users/beng_/anaconda3/include/pybind11_global/ -IC:/Users/beng_/anaconda3/include/ - pb_test.cpp -o pb_test

编译它: -I 路径避免了早期未找到 Python.h 的问题。但现在,我收到了一堆与未定义引用“_ imp_Py*”类型的错误相关的错误。太多了,数不过来。我的猜测是我缺少链接器,经过一番搜索,建议的提示似乎涉及 /anaconda3/libs 文件夹以及所有 dll。如果我尝试 -lc:/Users/beng

cannot find -lC:/Users/beng_/anaconda3/libs/python311
collect2.exe: error: ld returned 1 exit status

/anaconda3/libs/python311 或 python3,则它们都不起作用。相反,它会抱怨:

但是 python3.dll 和 python311.dll 都在该文件夹中。 我已经检查了类似的帖子,但到目前为止没有任何帮助我:

Pybind11 错误未定义对“Py_GetVersion”的引用


在链接 Python 库时遇到问题。 让我们逐步解决这个问题:

理解问题

错误信息“undefined reference to _imp_PyGILState_Check'” 以及其他类似错误表明,的 C++ 编译器在编译后的代码中找不到必要的 Python 函数定义。 这些定义通常位于 Python 库文件 (例如 python311.lib` on Windows) 中。

解决方案

  1. 找到 Python 库文件:

  2. 需要找到与的 Anaconda 环境相匹配的 python311.lib 文件。 它通常位于 Anaconda 安装目录的 libs 文件夹中,例如 C:\Users\beng_\anaconda3\libs

  3. 链接 Python 库:

  4. 将以下内容添加到的 g++ 命令中,用的实际 Anaconda 安装路径替换 C:\Users\beng_\anaconda3

    bash g++ -std=c++17 -O2 -mavx -IC:/Users/beng_/anaconda3/Lib/site-packages/pybind11/include -IC:/Users/beng_/anaconda3/include/pybind11_global/ -IC:/Users/beng_/anaconda3/include/ -LC:/Users/beng_/anaconda3/libs pb_test.cpp -o pb_test -lpython311

  5. -LC:/Users/beng_\anaconda3/libs 告诉编译器在哪里查找库文件。

  6. -lpython311 告诉编译器链接 python311.lib

其他提示

  • 确保使用正确的 Python 版本: 的代码和链接的 Python 库版本必须匹配。 如果使用的是 Anaconda 环境中的 Python 3.11,则需要链接 python311.lib
  • 检查环境变量: 确保的环境变量(例如 PATH )正确设置为的 Anaconda 环境。
  • 使用 CMake: 对于更复杂的项目,使用 CMake 可以更容易地管理构建过程和依赖项。 Pybind11 提供了 CMake 集成,可以自动找到并链接正确的 Python 库。

示例 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.4)

project(MyProject)

find_package(pybind11 REQUIRED)

add_executable(pb_test pb_test.cpp)
target_link_libraries(pb_test PRIVATE pybind11::embed) 

通过正确链接 Python 库,应该能够解决 “undefined reference” 错误并成功构建的 Pybind11 项目。

标签:python,c++,pybind11
From: 78803628

相关文章

  • 我正在制作一个可以打开wav文件的python程序,我想知道wav文件的格式是什么
    因此,我已经通过此网站的研究编写了验证并读取wav标头的代码。但我想知道,data段中的数据是如何存储的?它们位于16位部分中,彼此相邻放置。我认为在Audacity中制作440hz正弦波,然后导出它,会显示一些结果,并且字节确实看起来更整齐,但仍然像废话一样接缝。相信我,我已经......
  • python - 面板库 - PasswordInput 不会对回车做出反应
    我试图避免需要提交按钮。以下代码当前正在远程jupyter实验室运行。仅当光标焦点从密码小部件中移除后,才会打印该消息。我想要回车来触发消息打印。有什么线索吗?frompanel.widgetsimportPasswordInput,TextInputpn.extension()defon_enter(event=None):message_p......
  • 即使安装了软件包,也找不到 python 模块句子转换器
    对于我的python脚本(如下所示),我使用句子转换器包,其中包含SBERT模型。即使在执行“piplist”时明确列出该软件包,并且还安装了torch,所有内容都更新到最新版本,但仍然找不到该模块。脚本:importnumpyasnpimportpandasaspdfromsentence_transformersimportSenten......
  • 有没有办法在 python 中返回类实例的布尔属性?
    我想组织我玩的游戏中的汽车数据。为此,我创建了一个“Car”类。我希望将此类实例的一些属性作为布尔值,这样我就可以将此类的所有实例放入列表中并过滤它们。我当前的解决方案不起作用,因为,我收到以下错误消息:TypeError:__repr__returnednon-string(typeCar)我使用......
  • python 正则表达式匹配一行中的多个单词而不转到下一行
    我正在编写一个解析器来解析以下输出:admin@str-s6000-on-5:~$showinterfacestatusEthernet4InterfaceLanesSpeedMTUAliasVlanOperAdminTypeAsymPFC------------------------------------------......
  • 使用 Python 平滑和对称不规则形状和曲线
    我需要完成三项任务:正则化曲线曲线的对称性完成不完整的曲线例如,这里是输入和预期的输出图像:输入输出|||在一般设置中,形状可以由任何SVG曲线基元(贝塞尔曲线、直线、弧线)表示。为了统一表示,示例包含曲线的折线近似。这些折线保存为......
  • 在Python中通过绝对路径引用数据文件夹
    我有一个大型python项目,其中数据太大,无法每次都以相同的方式共享。不同的人可能会使用网络位置或将某些内容复制到本地驱动器。该路径由不同子文件夹中的脚本和笔记本使用。例如,我将创建一个config.py来定义数据文件夹的路径。importsyssys.path.append('../'......
  • OpenGL3.3_C++_Windows(32)
    demoSSAOSSAO环境光照(AmbientLighting):光的散射,我们通过一个固定的常量作为环境光的模拟,但是这种固定的环境光并不能很好模拟散射,因为环境光不是一成不变的,环境光遮蔽:让(褶皱、孔洞)等变暗的方法近似模拟出间接光照,但是这一技术会带来很大的性能开销,因为它还......
  • C++(指针悬挂)
    目录1.指针悬挂的成因2.防止指针悬挂的方法3.例子与实践4.总结指针悬挂(DanglingPointer)是C++编程中常见的一个问题,它指的是一个指针指向了已经被释放或者无效的内存区域。当对悬挂指针进行解引用操作时,程序行为将是未定义的,可能会导致崩溃、数据损坏或其他意外行为。1.......
  • python三天速成记(看完你就会)day3 满满干货~
    续上文啦~EXCEL表的操作上一篇文章讲了怎么读取和操作txt和csv文档,但其实我们生活中还有一个常用的文本格式那就是excel文件,特别是在对大量数据进行处理的时候。excel文件的用处和广泛。其实在python中有很多库可以处理excel文件,但是本文主要介绍使用最实用最广泛的库pan......