构建 MicroSIP 3.20.7:显示错误 "Unresolved External Symbols"

Building MicroSIP 3.20.7: Showing error "Unresolved External Symbols"

我正在尝试为 Windows 10 64 位构建 MicroSIP 版本 3.20.7操作系统.

我已经构建了 PjProject(如文档中所述)并获得了相同的所有 .lib 文件,现在我正在尝试使用这些 .lib 文件构建 MicroSIP 如其网站上的文档所述。

但我遇到了 未解析的外部符号 的错误,即 LNK2019 / LNK2001 / LNK1120.

(已附上参考图片)

我将按照以下步骤结束。

  1. 下载 PjProject 的源代码并使用 7Zip 提取源代码。
  2. pjlib\include\pj.
  3. 中添加了一个 config_site.h 文件
  4. 使用Visual Studio 2022,打开PjProject和select pjsua作为源项目。
  5. 将项目的配置设置为 -> x64 的 Debug-Static。和构建。
  6. 成功构建后,我获得了 PjProject 的所有 .lib 文件并成功部署了 pjsua 项目,显示了 PjSIP[=90= 的 cli 菜单].
  7. 现在,我从官网下载了最新的MicroSIP 3.20.7源码,并使用7Zip解压了源码。
  8. 将项目配置设置为 x64 调试,并将 windows 工具包中的所有头文件和库文件以及其他媒体库包含到 Include Directories and Library目录 {Opus、SDL2、FFMPEG、x264、VPX、PjProject}
  9. 开始搭建MicroSIP 3.20.7,成功获取MicroSIP.lib文件

但在构建必须为 MicroSIP 提供可执行文件的最后,有错误列表指出 未解析的外部符号 {LNK2019 / LNK2001 / LNK1120}

下面是控制台 windows 中出现所有错误的图像 link。

错误指出以下消息。

  1. 未解析的外部符号 pjmedia_get_vid_subsys 在函数“public: void __cdecl CmainDlg::OnTimer(unsigned __int64)”中引用 (? OnTimer@CmainDlg@@QEAAX_K@Z)

  2. 未解析的外部符号 pjmedia_vid_dev_refrence 在函数“public: void __cdecl CmainDlg::OnTimer(unsigned __int64)”中引用 (? OnTimer@CmainDlg@@QEAAX_K@Z).

还有其他17个错误(请参考上图)

下面是 link 在输出选项卡中记录错误的图像。


这些是记录到输出选项卡中的消息

Build started...
1>------ Build started: Project: microsip, Configuration: Debug x64 ------
1>stdafx.cpp
1>AAOptionsDlg.cpp
1>AccountDlg.cpp
1>AddDlg.cpp
1>addons.cpp
1>BaseDialog.cpp
1>ButtonDialer.cpp
1>Calls.cpp
1>CListCtrl_Sortable.cpp
1>CListCtrl_SortItemsEx.cpp
1>ClosableTabCtrl.cpp
1>Contacts.cpp
1>Dialer.cpp

1>C:\msys64\home\coral\tmp\sources\MicroSIP-3.20.7-src\lib\MessageBoxX.h(38,1): warning C4005: '_NODISCARD': macro redefinition (compiling source file Contacts.cpp)

1>C:\Program Files\Microsoft Visual Studio22\Community\VC\Tools\MSVC.30.30705\include\vcruntime.h(319): message : see previous definition of '_NODISCARD' (compiling source file Contacts.cpp)

1>global.cpp
1>IconButton.cpp
1>jumplist.cpp
1>CListCtrl_ToolTip.cpp
1>CMask.cpp
1>Crypto.cpp
1>CSVFile.cpp
1>Hid.cpp
1>json_reader.cpp
1>json_value.cpp
1>json_writer.cpp
1>langpack.cpp
1>LevelsSliderCtrl.cpp
1>Markup.cpp
1>MessageBoxX.cpp
1>ModelessMessageBox.cpp
1>MSIP.cpp
1>StdioFileEx.cpp

1>C:\msys64\home\coral\tmp\sources\MicroSIP-3.20.7-src\lib\MessageBoxX.h(38,1): warning C4005: '_NODISCARD': macro redefinition (compiling source file lib\MessageBoxX.cpp)

1>C:\Program Files\Microsoft Visual Studio22\Community\VC\Tools\MSVC.30.30705\include\vcruntime.h(319): message : see previous definition of '_NODISCARD' (compiling source file lib\MessageBoxX.cpp)

1>utf.cpp
1>VisualStylesXP.cpp
1>mainDlg.cpp
1>MessagesDlg.cpp
1>microsip.cpp
1>Preview.cpp
1>RinginDlg.cpp
1>settings.cpp
1>SettingsDlg.cpp
1>ShortcutsDlg.cpp
1>StatusBar.cpp
1>Transfer.cpp

1>   Creating library C:\msys64\home\coral\tmp\sources\MicroSIP-3.20.7-src\x64\Debug\microsip.lib and object C:\msys64\home\coral\tmp\sources\MicroSIP-3.20.7-src\x64\Debug\microsip.exp

1>mainDlg.obj : error LNK2019: unresolved external symbol pjmedia_get_vid_subsys referenced in function "public: void __cdecl CmainDlg::OnTimer(unsigned __int64)" (?OnTimer@CmainDlg@@QEAAX_K@Z)

1>mainDlg.obj : error LNK2019: unresolved external symbol pjmedia_vid_dev_refresh referenced in function "public: void __cdecl CmainDlg::OnTimer(unsigned __int64)" (?OnTimer@CmainDlg@@QEAAX_K@Z)

1>mainDlg.obj : error LNK2019: unresolved external symbol pjsua_vid_enum_devs referenced in function "public: int __cdecl CmainDlg::VideoCaptureDeviceId(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (?VideoCaptureDeviceId@CmainDlg@@QEAAHV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)

1>SettingsDlg.obj : error LNK2001: unresolved external symbol pjsua_vid_enum_devs

1>mainDlg.obj : error LNK2019: unresolved external symbol pjsua_vid_codec_set_priority referenced in function "public: void __cdecl CmainDlg::PJCreateRaw(void)" (?PJCreateRaw@CmainDlg@@QEAAXXZ)

1>mainDlg.obj : error LNK2019: unresolved external symbol pjsua_vid_codec_get_param referenced in function "public: void __cdecl CmainDlg::PJCreateRaw(void)" (?PJCreateRaw@CmainDlg@@QEAAXXZ)

1>SettingsDlg.obj : error LNK2001: unresolved external symbol pjsua_vid_codec_get_param

1>mainDlg.obj : error LNK2019: unresolved external symbol pjsua_vid_codec_set_param referenced in function "public: void __cdecl CmainDlg::PJCreateRaw(void)" (?PJCreateRaw@CmainDlg@@QEAAXXZ)

1>Preview.obj : error LNK2019: unresolved external symbol pjsua_vid_preview_param_default referenced in function "public: void __cdecl Preview::Start(int)" (?Start@Preview@@QEAAXH@Z)

1>Preview.obj : error LNK2019: unresolved external symbol pjsua_vid_preview_start referenced in function "public: void __cdecl Preview::Start(int)" (?Start@Preview@@QEAAXH@Z)

1>Preview.obj : error LNK2019: unresolved external symbol pjsua_vid_preview_get_win referenced in function "public: void __cdecl Preview::Start(int)" (?Start@Preview@@QEAAXH@Z)

1>Preview.obj : error LNK2019: unresolved external symbol pjsua_vid_preview_stop referenced in function "protected: void __cdecl Preview::OnDestroy(void)" (?OnDestroy@Preview@@IEAAXXZ)

1>Preview.obj : error LNK2019: unresolved external symbol pjsua_vid_win_get_info referenced in function "public: void __cdecl Preview::Start(int)" (?Start@Preview@@QEAAXH@Z)

1>Preview.obj : error LNK2019: unresolved external symbol pjsua_vid_win_set_pos referenced in function "public: void __cdecl Preview::Start(int)" (?Start@Preview@@QEAAXH@Z)

1>Preview.obj : error LNK2019: unresolved external symbol pjsua_vid_win_set_size referenced in function "public: void __cdecl Preview::Start(int)" (?Start@Preview@@QEAAXH@Z)

1>SettingsDlg.obj : error LNK2019: unresolved external symbol pjsua_vid_enum_codecs referenced in function "protected: virtual int __cdecl SettingsDlg::OnInitDialog(void)" (?OnInitDialog@SettingsDlg@@MEAAHXZ)

1>C:\msys64\home\coral\tmp\sources\MicroSIP-3.20.7-src\x64\Debug\microsip.exe : fatal error LNK1120: 14 unresolved externals

1>Done building project "microsip.vcxproj" -- FAILED.

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

以下是我尝试解决这些错误的方法。

  • 已检查是否正确 link 将包含文件添加到包含目录。
  • 检查库文件是否正确 linking 到库目录。
  • 检查了 PjSIP 和 MicroSIP 中的库和可执行文件的名称

但仍然存在同样的错误。 我为此绞尽脑汁已经一个多星期了,最后我要问了,所以请仔细研究我的问题并提供合法的指导以消除我的项目中的这些错误。

我正在使用 Visual Studio 2022。 我正在为 Windows 10 使用最新版本的 Windows 套件,即 10.0.20348.0.

接下来我该怎么做才能从源代码构建项目中获取 MicroSIP 可执行文件?

它可能丢失了

#define PJMEDIA_HAS_VIDEO 1

在 config_site.h.

所以基本上我弄清楚了项目中的问题。

如果我们不想使用视频选项,我们可以终止 Global_Constant_Video 选项 constant.h,这肯定会构建应用程序,但其中没有视频支持。 因此,如果启用视频是一个需要选择的选项,您需要再次清理并重建 PJSUA Cli 菜单应用程序,方法是向其添加视频支持以及首选视频编解码器,并使用从一开始就获得了构建 MicroSIP 应用程序的库。

希望您觉得这很容易,只需参与代码即可。

干杯