You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用pybind11遇__imp_PyGILState_Check未定义引用问题求助

解决方案:Windows下g++编译pybind11代码的链接问题

你的判断完全正确,__imp_Py*未定义引用错误就是因为缺少Python运行时库的链接步骤。Windows下g++链接Python库的方式和Linux略有不同,以下是具体解决方法:

正确的编译链接命令

方式1:通过库目录+库名链接

在原有编译命令中添加-L指定库目录,再用-l指定Python导入库名(去掉.lib后缀):

g++ -std=c++17 -O2 -mavx -IC:/Users/beng_/anaconda3/Lib/site-packages/pybind11/include -IC:/Users/beng_/anaconda3/include/ -LC:/Users/beng_/anaconda3/libs/ -lpython311 pb_test.cpp -o pb_test
  • -LC:/Users/beng_/anaconda3/libs/:告诉编译器到该目录查找库文件
  • -lpython311:链接对应版本的Python导入库(python311.lib)

方式2:直接指定库文件路径

如果方式1仍提示找不到库,可以直接把.lib文件路径加入命令:

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

额外注意事项

  • 确保g++和Anaconda Python的位数一致(均为32位或64位),否则会出现链接失败或运行时异常。
  • 若要生成可被Python导入的模块(而非可执行文件),需添加-shared参数,并将输出文件后缀改为.pyd:
    g++ -std=c++17 -O2 -mavx -shared -IC:/Users/beng_/anaconda3/Lib/site-packages/pybind11/include -IC:/Users/beng_/anaconda3/include/ -LC:/Users/beng_/anaconda3/libs/ -lpython311 pb_test.cpp -o pb_test.pyd
    

内容的提问来源于stack exchange,提问作者Ong Beng Seong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:48:18