如何使用 Visual Studio 2015 构建 PJSUA2 (swig)

How to build PJSUA2 (swig) with Visual Studio 2015

我尝试为 Python 编译 PJSUA2。我可以设法用 Visual Studio 2015 社区版编译源代码。

我的问题是,现在如何安装 Python 模块?

指南建议使用 make 和 make install。我也尝试安装 minwg,但由于该项目是用 VS 编译的,所以它无法正常工作。

I have also tried to compile with minwg, but I never could succeed due to undefined requirements. Also official PJSUA guide recommend to use VS for Windows.

已将以下设置应用于从源构建:

我可以做一个变通方法来为 Python 3.7 编译 pjsua2。如果您有更好的解决方案或对此解决方法的建议,请告诉我

先决条件:

  • 列表项
  • 下载并解压 swig (swigwin 4.0.0)
  • 下载并安装JDK
  • 下载并安装 Python (Python 3.7.3 x64) 并在自定义安装时设置:
    • 打勾"Add Python to environment variables"
    • 打勾"Precompile standard library"
    • 打勾"Download debugging symbols"
    • 打勾"Download debug binaries (requires VS 2015 or later)"
    • 根据需要设置自定义路径
    • 将 swigwin 位置添加到系统路径
    • 将Python位置添加到系统路径
    • 添加JAVA_HOME系统变量
    • 添加 %JAVA_HOME%\bin 到系统路径
    • 安装 Visual Studio 2015 社区版

步骤:

  • 下载并解压 pjsip 2.8
  • 在 pjlib/inlclude/pj/ 文件夹下创建空 config_site.h
  • 在VS
  • 中打开pjproject-vs14.sln
  • 会有不支持的警告window,按确定
  • 在 "Install Missing Features" windows,按安装
  • VS 安装程序将启动,必须​​关闭 VS 才能完成安装。
  • 我在安装中也添加了"Windows 10 SDK (10.0.10586)"。
  • 我还在 Windows 10 上启用了开发者模式,但这可能是可选的
  • 在 VS 中再次打开项目
  • 在顶部下拉列表中将项目设置为 Release 和 x64
  • 右键单击解决方案,然后转到“配置属性”>“配置”
  • 从 selection 中删除所有与 uwp 和 wp8 相关的项目,例如 pjsua_cli_uwp_comp、pjsua_cli_wp8_comp
  • 按确定,然后构建解决方案
  • 构建后我有 34 个成功,0 个失败的解决方案。
  • 将以下行添加到 pjsip-apps/src/swig 文件夹中的 pjsua2.i

    %inline %{
    pj_ssize_t new_pj_ssize_t(int s) {
       return (pj_ssize_t) s;
    }
    %}
    

    this extra inline swig function provides workaround for create recorder 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
    
  • 将新的 "Empty Project" (Visual C++) 添加到名称为 swig_python_pjsua2 的解决方案

  • 添加 libpjproject 和 pjsua2_lib 作为对这个新项目的引用
  • 右键单击头文件>添加>现有项...
  • 添加pjsip-apps\src\swig\pjsua2_wrapp.h
  • 将 "new filter" 添加到名称为 "Generated Code"
  • 的项目中
  • 右键单击 "Generated code" 并添加新的现有项目。
  • 添加pjsip-apps\src\swig\pjsua2_wrapp.cxx
  • 右键单击项目和链接器>输入
  • 将"Ws2_32.Lib"添加到"Additional Dependencies"
  • 转到"VC++ Directories"
  • 添加以下文件夹以包含路径(我使用的是完整路径!):
    • c:\python37\include
    • pjnath\include
    • pjsip\include
    • pjmedia\include
    • pjlib-util\include
    • pjlib\include
  • 将以下文件夹添加到库目录:
    • C:\Python36\libs
  • 设置为常规:
    • 目标名称:_$(ProjectName)
    • 目标扩展名:.pyd
    • 配置类型:动态库 (.dll)
  • 转到解决方案的属性,然后 select swig_python_pjsua2 构建
  • 右键单击 swig_python_pjsua2 并构建
  • 构建应成功完成
  • 您需要提交文件才能在 python 中使用 pjsua2 库。
  • pjsua.py 位于 pjsip-apps/src/swig/python
  • x64/Release/_swig_python_pjsua2.pyd(重命名为_pjsua2.pyd)
  • 要测试,将这些文件复制到文件夹中,从同一文件夹启动 python 并键入:
    • 导入 pjsua2

非常感谢 Krisz 的出色工作!


我刚在 Python 2.7 / 32 位上工作,有些地方略有不同,所以我会在这里添加它们:

环境:

  • Windows 10
  • 痛饮 4.0.1
  • PJSIP 2.9
  • Python 2.7.14(32 位)
  • Visual Studio Express 2015(V 14.0.25431.01 更新 3)

Whaddado:

  1. 重要提示:检查您的 Python-interpreter 是否真的是 x64 或 win32,如下所示: 启动 python 会话并输入:

    import platform

    platform.architecture()

    如果您有 32 位,请在选择 VS 中的目标平台时考虑这一点。

  2. 当您将此 %inline%-Snippet 添加到 pjsip-apps/src/swig/pjsua2.i 时,将其添加到 文件末尾!

  3. 启动 swig-command 时,省略“-py3”参数,如果你使用 Python 2.x

  4. Krisz 的描述中有一点错字,在 "pjsua.py located under pjsip-apps/src/swig/python" -> 当然是 pjsua2.py 的意思。不要使用 pjsua.py.

最终将 _pjsua2.lib 和 pjsua2.py 复制到 \Lib\site-packages\ 并将 _pjsua2.pyd 复制到 \DLLs\ 以便它们随处可用。