【问题标题】:How to build PJSUA2 (swig) with Visual Studio 2015如何使用 Visual Studio 2015 构建 PJSUA2 (swig)
【发布时间】:2020-08-08 09:18:41
【问题描述】:
我尝试为 Python 编译 PJSUA2。我可以设法用 Visual Studio 2015 社区版编译源代码。
我的问题是,我现在如何安装 Python 模块?
指南建议使用 make 和 make install。我也尝试安装 minwg,但由于项目是用 VS 编译的,所以它不起作用。
我也尝试过使用 minwg 进行编译,但由于未定义的要求,我永远无法成功。 PJSUA 官方指南也推荐使用 VS for Windows。
以下设置已应用于从源代码构建:
- Swig 位置已添加到路径中
- 已添加 JAVA_home 系统变量
- Java 位置已添加到路径中
- 已创建空 pjlib/include/pj/config_site.h
- 在 VS 2015 社区开源(已安装所有建议的 VS 包和模块)
- 将以下项目设置为不编译:
- pjsua_cli_uwp_comp
- pjsua_cli_wp8
- pjsua_cli_wp8_comp
- 将 swig_java_pjsua2 设置为构建。
- 将以下文件夹添加到 swig_java_pjsua2 VC++ 包含目录
- c:\Program Files\Java\jdk-11.0.2\include
- c:\Program Files\Java\jdk-11.0.2\include\win32
- 构建解决方案
【问题讨论】:
标签:
python
sip
voip
pjsua2
【解决方案1】:
我可以为 Python 3.7 编译 pjsua2。如果您有更好的解决方案或只是对此解决方法的建议,请告诉我
前提条件:
- 列表项
- 下载并解压 swig (swigwin 4.0.0)
- 下载安装JDK
- 下载并安装 Python (Python 3.7.3 x64) 并设置为自定义安装:
- 勾选“将 Python 添加到环境变量”
- 勾选“预编译标准库”
- 勾选“下载调试符号”
- 勾选“下载调试二进制文件(需要 VS 2015 或更高版本)”
- 根据需要设置自定义路径
- 将 swigwin 位置添加到系统路径
- 将 Python 位置添加到系统路径
- 添加 JAVA_HOME 系统变量
- 将 %JAVA_HOME%\bin 添加到系统路径
- 安装 Visual Studio 2015 社区版
步骤:
- 下载并解压 pjsip 2.8
- 在 pjlib/inlclude/pj/ 文件夹下创建空的 config_site.h
- 在VS中打开pjproject-vs14.sln
- 会有一个不支持的警告窗口,按确定
- 在“安装缺少的功能”窗口中,按安装
- VS 安装程序将启动,必须关闭 VS 才能完成安装。
- 我还在安装中添加了“Windows 10 SDK (10.0.10586)”。
- 我还在我的 Windows 10 上启用了开发者模式,但这可能是可选的
- 在 VS 中再次打开项目
- 在顶部下拉菜单中将项目设置为 Release 和 x64
- 右键单击解决方案,然后转到配置属性> 配置
- 从选择中删除所有与 uwp 和 wp8 相关的项目,例如 pjsua_cli_uwp_comp、pjsua_cli_wp8_comp
- 按 OK,然后构建解决方案
- 构建后我有 34 个成功和 0 个失败的解决方案。
-
在 pjsip-apps/src/swig 文件夹中的 pjsua2.i 中添加以下行
%inline %{
pj_ssize_t new_pj_ssize_t(int s) {
return (pj_ssize_t) s;
}
%}
这个额外的内联 swig 函数为创建记录器issue提供了解决方法
- 打开命令行(powershell 不适用于此)
- 转到 pjsip-apps/src/swig/python
-
执行以下命令:
swig -I../../../../pjlib/include -I../../../../pjlib-util/include -I../../../../pjmedia/include -I../../../../pjsip/include -I../../../../pjnath/include -py3 -c++ -python -threads ../pjsua2.i
使用 swig_python_pjsua2 名称将新的“空项目”(Visual C++) 添加到解决方案中
- 添加 libpjproject 和 pjsua2_lib 作为对这个新项目的引用
- 右键单击头文件>添加>现有项...
- 添加 pjsip-apps\src\swig\pjsua2_wrapp.h
- 向名为“Generated Code”的项目添加“新过滤器”
- 右键单击“生成的代码”并添加新的现有项目。
- 添加 pjsip-apps\src\swig\pjsua2_wrapp.cxx
- 右键单击项目和链接器>输入
- 将“Ws2_32.Lib”添加到“其他依赖项”
- 转到“VC++ 目录”
- 添加以下文件夹以包含路径(我使用了完整路径!):
- c:\python37\include
- pjnath\包括
- pjsip\include
- pjmedia\include
- pjlib-util\include
- pjlib\include
- 将以下文件夹添加到库目录:
- 设置为常规:
- 目标名称:_$(ProjectName)
- 目标扩展名:.pyd
- 配置类型:动态库 (.dll)
- 转到解决方案的属性,然后选择 swig_python_pjsua2 进行构建
- 右键单击 swig_python_pjsua2 并构建
- 构建应该成功完成
- 您需要归档才能在 python 中使用 pjsua2 库。
- pjsua.py 位于 pjsip-apps/src/swig/python 下
- x64/Release/_swig_python_pjsua2.pyd(重命名为_pjsua2.pyd)
- 要测试,请将这些文件复制到文件夹中,从同一文件夹启动 python 并键入:
【解决方案2】:
非常感谢 Krisz 所做的出色工作!
我刚刚让它适用于 Python 2.7 / 32bit,有些东西略有不同,所以我将在此处添加它们:
环境:
- Windows 10
- SWIG 4.0.1
- PJSIP 2.9
- Python 2.7.14(32 位)
- Visual Studio Express 2015(V 14.0.25431.01 更新 3)
什么:
-
重要提示:检查您的 Python 解释器是否真的是 x64 或 win32,如下所示:
启动一个 python 会话并输入:
导入平台
platform.architecture()
如果您有 32 位,请在选择 VS 中的目标平台时考虑这一点。
-
当您将此 %inline%-Snippet 添加到 pjsip-apps/src/swig/pjsua2.i 时,请将其添加到文件末尾!
李>
在启动 swig-command 时,如果您使用 Python 2.x,请省略“-py3”-参数
Krisz 的描述中有一个小错字,“pjsua.py 位于 pjsip-apps/src/swig/python 下”-> 当然是指 pjsua2.py。不要使用 pjsua.py。
最后将 _pjsua2.lib 和 pjsua2.py 复制到 \Lib\site-packages\ 并将 _pjsua2.pyd 复制到 \DLLs\ 以使它们在任何地方都可用。