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
相关产品推荐
相关产品推荐

