如何在Windows 10上编译生成Python 3.x版PJSUA2包?
解决Windows 10下Python 3.x版PJSUA2模块构建失败问题
在Windows 10系统中,已成功编译PJSIP的C++源码,但构建Python版PJSUA2模块时遇到以下问题:
- 在
./pjsip-apps/src/swig目录执行make,报错找不到../../../build.mak - 在
./pjsip-apps/src/swig/python目录执行make,出现sed命令错误、找不到/build/common.mak,以及编译时无法找到pjsua2.hpp头文件的问题
核心原因分析
- 构建路径错误:PJSIP的Makefile依赖根目录生成的构建配置文件,直接在子目录执行
make会导致路径引用失效。 - Windows shell环境不兼容:默认的Windows命令提示符或PowerShell对
sed等Unix工具支持不佳,导致SWIG包装代码生成失败。 - 头文件路径未正确关联:编译Python扩展时,未正确指定PJSIP头文件的搜索路径,导致找不到
pjsua2.hpp。
分步解决方案
1. 确认前置环境与基础编译完成
- 安装SWIG 4.x版本(需与PJSIP源码版本兼容,将其添加到系统PATH)
- 确保MinGW环境配置正确,且与编译PJSIP C++代码时使用的工具链一致
- 已在PJSIP根目录完成C++代码编译(执行过
configure和make,根目录下生成build.mak等配置文件)
2. 使用正确的构建流程
不要直接在子目录执行make,需从PJSIP根目录触发SWIG模块构建:
- 打开MinGW终端(而非Windows默认命令行),切换到PJSIP根目录
- 执行以下命令生成Python版PJSUA2的SWIG包装文件:
该命令会自动处理路径依赖,生成所需的make pjsua2-pythonpjsua2_wrap.cpp及相关配置
3. 手动修复构建路径(若上述命令失败)
如果make pjsua2-python执行失败,可手动指定头文件路径构建:
- 切换到
./pjsip-apps/src/swig/python目录 - 修改
setup.py,在include_dirs中添加PJSIP的头文件路径:include_dirs = [ '../../../../pjlib/include', '../../../../pjlib-util/include', '../../../../pjmedia/include', '../../../../pjsip/include', '../../../../pjsip-apps/include', # 补充你的Python头文件路径,例如C:/Python39/include ] - 执行以下命令手动构建:
python setup.py build --compiler=mingw32 --include-dirs=../../../../pjlib/include;../../../../pjlib-util/include;../../../../pjmedia/include;../../../../pjsip/include;../../../../pjsip-apps/include
4. 解决Windows shell的sed错误
若遇到sed命令相关错误,需确保使用MinGW自带的sed工具:
- 打开MinGW终端,执行
sed --version确认工具可用 - 全程使用MinGW终端执行构建命令,避免使用Windows命令提示符或PowerShell
内容的提问来源于stack exchange,提问作者hicawow924
相关产品推荐
相关产品推荐

