【问题标题】: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
    • 将以下文件夹添加到库目录:
      • C:\Python36\libs
    • 设置为常规:
      • 目标名称:_$(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 并键入:
      • 导入 pjsua2

    【讨论】:

      【解决方案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)

      什么:

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

        导入平台

        platform.architecture()

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

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

        李>
      3. 在启动 swig-command 时,如果您使用 Python 2.x,请省略“-py3”-参数

      4. Krisz 的描述中有一个小错字,“pjsua.py 位于 pjsip-apps/src/swig/python 下”-> 当然是指 pjsua2.py。不要使用 pjsua.py。

      最后将 _pjsua2.lib 和 pjsua2.py 复制到 \Lib\site-packages\ 并将 _pjsua2.pyd 复制到 \DLLs\ 以使它们在任何地方都可用。

      【讨论】:

        猜你喜欢
        • 2015-12-29
        • 1970-01-01
        • 2021-10-18
        • 2017-05-09
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多