Windows下使用SWIG扩展Python时ld.exe报错找不到-lpython求助
Windows 下 SWIG 扩展 Python 链接报错解决方案
错误根因
你触发的cannot find -lpython报错有3个核心问题:
-l参数后只能跟库名,不能直接写Python安装路径,指定库搜索路径需要用-L参数- 你当前使用的64位MinGW(x86_64-w64-mingw32)和32位Python3.8架构不匹配,无法跨架构链接
- Linux下的扩展后缀
.so不适用于Windows,Python在Windows下识别的扩展后缀为.pyd
可行操作步骤
第一步:对齐架构
二选一即可:
- 卸载当前64位MinGW,安装32位版本MinGW(i686-w64-mingw32)
- 卸载当前32位Python3.8,安装对应64位版本Python
第二步:修正编译与链接命令
首先编译.o目标文件时,需要通过-I参数指定Python头文件目录,示例:
gcc -c hellomodule.c hello_wrap.c -I"C:\Users\LENOVO\AppData\Local\Programs\Python\Python38-32\include" -fPIC
然后执行链接命令,通过-L指定Python库目录,-l后跟对应版本的Python库名,输出后缀改为.pyd:
gcc -shared hellomodule.o hello_wrap.o -o _hello.pyd -L"C:\Users\LENOVO\AppData\Local\Programs\Python\Python38-32\libs" -lpython38
补充注意事项
- 若Python的
libs目录下只有python38.lib没有MinGW格式的libpython38.a也无需额外转换,MinGW可直接兼容链接MSVC生成的.lib文件 - 所有包含空格的路径必须用英文双引号包裹,避免路径识别错误
内容的提问来源于stack exchange,提问作者ftkhateeb
相关产品推荐
相关产品推荐

