Windows Zoom SDK: LNK2001 on DuiLib64, even when linker is correct


Description
I have had to upgrade our Zoom SDK as the software we developed no longer works with the older version (creating join meeting failed, error_code=10). Upgrading the ZoomSDK to accommodate the developed software has been difficult. I am now getting LNK2001 errors for unresolved external symbols linking to .obj files throughout the build. This is the only error I am receiving. The error will be difficult to reproduce as I have other dependencies.

I am attempting to build a release x64 solution, other solutions did not work. The other dependencies required include openssl, NDI and others.

The sdk builds by itself, our software builds by itself, but building the software with the new SDK does not work.

@chunsiong.zoom , you are all over the forums, would appreciate your help :slight_smile:

Which Windows Meeting SDK version?
Version = zoom-sdk-windows-5.17.6.31095

To Reproduce(If applicable)
Add the following dependencies to your solution:
DuiLib64.lib
sdk.lib
Processing.NDI.Lib.Advanced.x64.lib
OpenSsl

Build the release version in x64 using vsc143 or vsc142.

Screenshots
Output Log

Build started...
1>------ Build started: Project: sdk_demo_v2, Configuration: Release x64 ------
1>chat_controller_ui.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKMeetingChatUIMgr::onChatStautsChangedNotification(struct ZOOMSDK::tagChatStatus *)" (?onChatStautsChangedNotification@CSDKMeetingChatUIMgr@@UEAAXPEAUtagChatStatus@ZOOMSDK@@@Z)
1>chat_controller_workflow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKChatControllerWorkFlow::onChatStautsChangedNotification(struct ZOOMSDK::tagChatStatus *)" (?onChatStautsChangedNotification@CSDKChatControllerWorkFlow@@UEAAXPEAUtagChatStatus@ZOOMSDK@@@Z)
1>CustomizedUIRecordMgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CustomizedUIRecordMgr::onRecordPriviligeChanged(bool)" (?onRecordPriviligeChanged@CustomizedUIRecordMgr@@UEAAX_N@Z)
1>custom_ui_mgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CCustomizeInMeetingUIMgr::onUserNameChanged(unsigned int,wchar_t const *)" (?onUserNameChanged@CCustomizeInMeetingUIMgr@@UEAAXIPEB_W@Z)
1>custom_ui_mgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CCustomizeInMeetingUIMgr::onCoHostChangeNotification(unsigned int,bool)" (?onCoHostChangeNotification@CCustomizeInMeetingUIMgr@@UEAAXI_N@Z)
1>custom_ui_mgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CCustomizeInMeetingUIMgr::onHostChangeNotification(unsigned int)" (?onHostChangeNotification@CCustomizeInMeetingUIMgr@@UEAAXI@Z)
1>custom_ui_mgr_flow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKCustomUIWorkFlow::onHostChangeNotification(unsigned int)" (?onHostChangeNotification@CSDKCustomUIWorkFlow@@UEAAXI@Z)
1>custom_ui_mgr_flow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKCustomUIWorkFlow::onUserNameChanged(unsigned int,wchar_t const *)" (?onUserNameChanged@CSDKCustomUIWorkFlow@@UEAAXIPEB_W@Z)
1>custom_ui_mgr_flow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKCustomUIWorkFlow::onCoHostChangeNotification(unsigned int,bool)" (?onCoHostChangeNotification@CSDKCustomUIWorkFlow@@UEAAXI_N@Z)
1>more_features_ui.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CMoreFeaturesUIMgr::onUserNameChanged(unsigned int,wchar_t const *)" (?onUserNameChanged@CMoreFeaturesUIMgr@@UEAAXIPEB_W@Z)
1>NDIControlWindowUI.obj : error LNK2001: unresolved external symbol "public: bool __cdecl CustomizedUIRecordMgr::StartRawRecording(void)" (?StartRawRecording@CustomizedUIRecordMgr@@QEAA_NXZ)
1>NDIControlWindowUI.obj : error LNK2001: unresolved external symbol "public: bool __cdecl CustomizedUIRecordMgr::StopRawRecording(void)" (?StopRawRecording@CustomizedUIRecordMgr@@QEAA_NXZ)
1>setting_api_test.obj : error LNK2001: unresolved external symbol "public: enum ZOOMSDK::SDKError __cdecl CSDKVideoSettingsWorkFlow::EnableAlwaysUse16v9(bool)" (?EnableAlwaysUse16v9@CSDKVideoSettingsWorkFlow@@QEAA?AW4SDKError@ZOOMSDK@@_N@Z)
1>D:\Github\zoom-sdk-windows-5.17.6.31095\x64\bin\ZoomCoordinator.exe : fatal error LNK1120: 13 unresolved externals
1>Done building project "sdk_demo_v2.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 12:20 PM and took 00.377 seconds ==========

Linker Additional libraries Directory

$(SolutionDir)Source\Dependencies\Lib\duilib\lib;$(SolutionDir)Source\Dependencies\Lib\openssl;$(SolutionDir)Source\Dependencies\Lib

Linker Additional Dependencies

DuiLib64.lib;sdk.lib;Processing.NDI.Lib.Advanced.x64.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies)

Troubleshooting Routes

  • Tested with sample app and not able to reproduce
  • Gone through the forum, some people suggested not using x64, but its worked in the past for us
  • Ensured all linked dependencies have the right path, see images.

Device (please complete the following information):

  • Device: Custom PC, AMD Threadripper Pro, Nvidia RTX A6000
  • OS: Windows 10

Additional context
I do have the premium service to Zoom, the custom support line was not helpful. I am also unable to attach media to this post even though the option is there?

@josh.perrott-hodgson ,

Let me clarify some assumptions.

You upgraded from x64 SDK to a newer version of the x64 SDK right?

Here’s what I might do to troubleshoot

  1. Check if this has been set to release
    image

  2. Start looking through all these

1>chat_controller_ui.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKMeetingChatUIMgr::onChatStautsChangedNotification(struct ZOOMSDK::tagChatStatus *)" (?onChatStautsChangedNotification@CSDKMeetingChatUIMgr@@UEAAXPEAUtagChatStatus@ZOOMSDK@@@Z)
1>chat_controller_workflow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKChatControllerWorkFlow::onChatStautsChangedNotification(struct ZOOMSDK::tagChatStatus *)" (?onChatStautsChangedNotification@CSDKChatControllerWorkFlow@@UEAAXPEAUtagChatStatus@ZOOMSDK@@@Z)
1>CustomizedUIRecordMgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CustomizedUIRecordMgr::onRecordPriviligeChanged(bool)" (?onRecordPriviligeChanged@CustomizedUIRecordMgr@@UEAAX_N@Z)
1>custom_ui_mgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CCustomizeInMeetingUIMgr::onUserNameChanged(unsigned int,wchar_t const *)" (?onUserNameChanged@CCustomizeInMeetingUIMgr@@UEAAXIPEB_W@Z)
1>custom_ui_mgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CCustomizeInMeetingUIMgr::onCoHostChangeNotification(unsigned int,bool)" (?onCoHostChangeNotification@CCustomizeInMeetingUIMgr@@UEAAXI_N@Z)
1>custom_ui_mgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CCustomizeInMeetingUIMgr::onHostChangeNotification(unsigned int)" (?onHostChangeNotification@CCustomizeInMeetingUIMgr@@UEAAXI@Z)
1>custom_ui_mgr_flow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKCustomUIWorkFlow::onHostChangeNotification(unsigned int)" (?onHostChangeNotification@CSDKCustomUIWorkFlow@@UEAAXI@Z)
1>custom_ui_mgr_flow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKCustomUIWorkFlow::onUserNameChanged(unsigned int,wchar_t const *)" (?onUserNameChanged@CSDKCustomUIWorkFlow@@UEAAXIPEB_W@Z)
1>custom_ui_mgr_flow.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKCustomUIWorkFlow::onCoHostChangeNotification(unsigned int,bool)" (?onCoHostChangeNotification@CSDKCustomUIWorkFlow@@UEAAXI_N@Z)
1>more_features_ui.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CMoreFeaturesUIMgr::onUserNameChanged(unsigned int,wchar_t const *)" (?onUserNameChanged@CMoreFeaturesUIMgr@@UEAAXIPEB_W@Z)
1>NDIControlWindowUI.obj : error LNK2001: unresolved external symbol "public: bool __cdecl CustomizedUIRecordMgr::StartRawRecording(void)" (?StartRawRecording@CustomizedUIRecordMgr@@QEAA_NXZ)
1>NDIControlWindowUI.obj : error LNK2001: unresolved external symbol "public: bool __cdecl CustomizedUIRecordMgr::StopRawRecording(void)" (?StopRawRecording@CustomizedUIRecordMgr@@QEAA_NXZ)
1>setting_api_test.obj : error LNK2001: unresolved external symbol "public: enum ZOOMSDK::SDKError __cdecl CSDKVideoSettingsWorkFlow::EnableAlwaysUse16v9(bool)" (?EnableAlwaysUse16v9@CSDKVideoSettingsWorkFlow@@QEAA?AW4SDKError@ZOOMSDK@@_N@Z)
  1. Example for the first, I’ll be working on
chat_controller_ui.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CSDKMeetingChatUIMgr::onChatStautsChangedNotification(struct ZOOMSDK::tagChatStatus *)" (?onChatStautsChangedNotification@CSDKMeetingChatUIMgr@@UEAAXPEAUtagChatStatus@ZOOMSDK@@@Z)

I’ll look at if there is really a method CSDKMeetingChatUIMgr::onChatStautsChangedNotification

First I’ll search for CSDKMeetingChatUIMgr which will eventually bring me to chat_controller_ui.h . It appears there is a change in the name


I’ll change to name to reflect the correct name.

  1. Example for the second, seems to be related to first
  2. Example for the third.
CustomizedUIRecordMgr.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl CustomizedUIRecordMgr::onRecordPriviligeChanged(bool)" (?onRecordPriviligeChanged@CustomizedUIRecordMgr@@UEAAX_N@Z)

It will bring me to CustomizedUIRecordMgr.h

This seems to be difference in the spelling / method name.
onRecordPriviligeChanged compared to onRecordPrivilegeChanged

You might need to look at them one by some. Some of them might be renamed, deprecated, remove, added, or shifted to other interfaces over the versions.

Hope that helps.

1 Like

I went through all of these and did update the names of them, there were inconsistencies that did fix these linker issues. However, I am now getting issues with what is being built. I want the application we developed being built not the demo provided.

@josh.perrott-hodgson do you have the new list of errors?

@josh.perrott-hodgson Hope you will be fine.

You are not adding project dependencies properly.

Currently no errors-I have upgraded the SDK which now builds fine, but the wrong project is being built. The “demo” application is being built not the application I have made, I suspect it is the build settings in visual studio that I have failed to modify correctly.

@josh.perrott-hodgson

Taking a stab in the dark for troubleshooting

Did you right click on your project and set it as startup project?

@chunsiong.zoom , yeah I have done this. The original code was built off of the demo, so although I am using the same solution a different UI is placed over the top of it…not good practice I know. I am now making some progress but getting errors on the custom UI that has been developed. Specifically errors on this function:

void CSDKDemoApp::InitCustomizedUI()
{
	if (SDKInterfaceWrap::GetInst().IsSelectCustomizedUIMode())
	{
		if (NULL == m_customizedMeetingUI)
		{
			m_customizedMeetingUI = new CCustomizeInMeetingUIMgr();
			if (m_customizedMeetingUI) {
				m_customizedMeetingUI->SetEvent(this);
				m_customizedMeetingUI->SetNDIControlWindow(m_ndi_control_window_ui);
			}
		}
		else
		{
			m_customizedMeetingUI->Init();
			m_customizedMeetingUI->SetEvent(this);
			m_customizedMeetingUI->SetNDIControlWindow(m_ndi_control_window_ui);
		}
	}
}

CCustomizeInMeetingUIMgr cannot instantiate the abstract class. It seems like it is being declared like this:

class CCustomizeInMeetingUIMgr :
    public ICutomizedUIOwnWndInterface,
    public ZOOM_SDK_NAMESPACE::ICustomizedUIMgrEvent,
    public ZOOM_SDK_NAMESPACE::ICustomizedVideoContainerEvent,
    public ZOOM_SDK_NAMESPACE::ICustomizedShareRenderEvent,
    public ISDKInMeetingServiceCustomUIEvent
{
    // ...
};

A lot of these functions are pure virtual functions and consequently instances cant be created directly? So I need to ensure that all pure virtual functions from the inherited interfaces are implemented somehow in CCustomizeMeetingUIMgr?

Basically, it builds, but the UI isn’t being displayed and I am getting errors from the CCustomizeInMeetingUIMgr and consequently the XML for the UI (IDXML_NDICONTROL_WINDOW_UI) isn’t being used.

Severity	Code	Description	Project	File	Line	Suppression State
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2065	'IDXML_NDICONTROL_WINDOW_UI': undeclared identifier	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Public\NDIControlWindowUI.h	77	
Error	C2259	'CCustomizeInMeetingUIMgr': cannot instantiate abstract class	sdk_demo_v2	D:\Github\ZoomCoordinatorV2\Source\ZoomCordinator\Private\sdk_demo_app.cpp	324	

Any support you can recommend?

Yes.

For the other questions on the Window UI, I’m unfamiliar with it.

Managed to get this working, essentially the SDK update fixed a lot of syntax errors that are quite difficult to spot. Unfortunately the errors I received weren’t helpful so I just went through the whole code base finding where the inconsistencies were.

As for the UI issues, I couldnt find a solution so I rebuilt the window for the application myself. The application was developed by a previous engineer who did not document or comment the code they developed, so starting from scratch was probably the best solution anyway.

1 Like

If anyone has a similar issue do reach out to me after this thread is closed-I may be able to help but this is a bespoke application and a unique problem.

hi @josh.perrott-hodgson i am getting a similar error

1>C:\Users\swatantra05s\Desktop\meetingsdk-win-raw-recording-sample-main\zoom-sdk-windows-5.17.11.34885\x64\demo\sdk_demo_v2\LOGIN_sdk_login_UI.cpp(325,32): error C2259: ‘ZoomSDKAudioRawDataDelegate’: cannot instantiate abstract class

where the header file is
#pragma once
#include “stdafx.h”
#include “rawdata/rawdata_audio_helper_interface.h”

class ZoomSDKAudioRawDataDelegate : public ZOOM_SDK_NAMESPACE::IZoomSDKAudioRawDataDelegate
{
public:
ZoomSDKAudioRawDataDelegate(){};
virtual ~ZoomSDKAudioRawDataDelegate(){};
virtual void onMixedAudioRawDataReceived(AudioRawData* data_) override;
virtual void onOneWayAudioRawDataReceived(AudioRawData* data_, uint32_t node_id) override;
};

and the way it is getting called is
const auto delegate = new ZoomSDKAudioRawDataDelegate();

Waiting for a response