Cesium/Tinyxml2 with NDisplay Error on Launch

Hello,

I am trying to run a Cesium standalone application with NDisplay. I am running it locally on my development machine from the packaged project with the following command in an effort to not have to use the Switchboard listener nor the Unreal Editor:

start UnrealCesium.exe -game -messaging -dc_cluster -nosplash -fixedseed -NoVerifyGC -noxrstereo -xrtrackingonly -RemoteControlIsHeadless -StageFriendlyName=“Node_0” -dc_cfg=“ND_packaged.ndisplay” -dx12 -dc_dev_mono -dc_node=Node_0 Log=Node_0.log -ini:Engine:[/Script/Engine.Engine]:GameEngine=/Script/DisplayCluster.DisplayClusterGameEngine,[/Script/Engine.Engine]:GameViewportClientClassName=/Script/DisplayCluster.DisplayClusterViewportClient,[/Script/Engine.UserInterfaceSettings]:bAllowHighDPIInGameMode=True -ini:Game:[/Script/EngineSettings.GeneralProjectSettings]:bUseBorderlessWindow=True -ini:Input:[/Script/Engine.InputSettings]:DefaultPlayerInputClass=/Script/DisplayCluster.DisplayClusterPlayerInput -unattended -NoScreenMessages -handleensurepercent=0 -UDPMESSAGING_TRANSPORT_MULTICAST=“230.0.0.1:6666” -UDPMESSAGING_TRANSPORT_UNICAST=“127.0.0.1:0” -UDPMESSAGING_TRANSPORT_STATIC=“132.224.164.196:9030” -ExecCmds=“DisableAllScreenMessages” -fullscreen -CONCERTRETRYAUTOCONNECTONERROR -CONCERTAUTOCONNECT -CONCERTSERVER=“UnrealCesium_MU_Server” -CONCERTSESSION=“MU_Session” -CONCERTDISPLAYNAME=“Node_0” -CONCERTISHEADLESS -DPCVars=“Slate.bAllowNotifications=0,p.Chaos.Solver.Deterministic=1”

When it runs, it does not complete and has a fatal error involving tinyxml parsing. This error also occurs when I use the Switchboard program calling the executable directly with my ndisplay configuration. Please see this zip for the log of the occurance
UnrealCesium.zip (20.5 KB)

Part of the callstack:

[2025.01.29-22.59.39:128][ 1]LogWindows: Error: === Critical error: ===
[2025.01.29-22.59.39:128][ 1]LogWindows: Error:
[2025.01.29-22.59.39:128][ 1]LogWindows: Error: Fatal error!
[2025.01.29-22.59.39:128][ 1]LogWindows: Error:
[2025.01.29-22.59.39:128][ 1]LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000001
[2025.01.29-22.59.39:128][ 1]LogWindows: Error:
[2025.01.29-22.59.39:128][ 1]LogWindows: Error: [Callstack] 0x00007ff66b344900 UnrealCesium.exe!tinyxml2::XMLNode::ParseDeep()
[2025.01.29-22.59.39:129][ 1]LogWindows: Error: [Callstack] 0x00007ff66abcca26 UnrealCesium.exe!CesiumRasterOverlays::TileMapServiceTileProvider::~TileMapServiceTileProvider()
[2025.01.29-22.59.39:129][ 1]LogWindows: Error: [Callstack] 0x00007ff66abcd586 UnrealCesium.exe!CesiumRasterOverlays::TileMapServiceTileProvider::~TileMapServiceTileProvider()
[2025.01.29-22.59.39:129][ 1]LogWindows: Error: [Callstack] 0x00007ff66abc8ea5 UnrealCesium.exe!

I do know my standalone server and unreal engine should be working as this project works within the editor but when I try to execute it standalone, I keep getting this specific fatal error. It also works when I run it through the Switchboard UI with the Unreal Editor as the base program calling my unreal project.

Thanks!

I found a similar issue, might be related. Check this link: Crash game when Use TMS

That is a helpful read but I can package my project fine with what is suggested: remove the TinyXML reference library inside of the plugin directory for it to use the thirdparty version. But on execution, I run into that ParseDeep problem. I imagine my process packaged without running the problem but that user could not package without running it, thereby running into my problem.

I think of crucial note is that if I run it via the Switchboard Listener with the editor and uproject, it seems to run correctly (In the environment I want to run this, i cannot install the editor so this cannot be a solution). Perhaps something in the packaging is losing access to the tinyxml2 functions? I don’t see how that could be possible.

Hi @aedanwells, this is a tricky one.

The Unreal “packaged build” compilation model is that the Unreal Engine code, plus all plugins, get dumped into a single executable. If two plugins (in this case, Cesium for Unreal and NDisplay) use the same third-party library (tinyxml2), then there is a potential for major problems. If the third-party library versions are different, we’ll either get compilation errors or crashes at runtime.

The only solution is to make sure that everything uses the same version. Prior to UE 5.5, this was extremely difficult in the NDisplay / tinyxml2 case because the Engine did not include the necessary header and lib files in a form that Cesium for Unreal could use. Fortunately, Epic fixed this in UE 5.5, but we haven’t yet modified our build process to make our plugin use them.

So, I see from your log that you’re using UE 5.3.2. Are you able to upgrade to UE 5.5? If so, I’ll open a PR that modifies our build process and you can try it out. Unfortunately, I don’t know of a good solution in prior versions of UE.

I should be able to upgrade to 5.5, I will upgrade my project and try again

Ok, let me know how you go. There’s a chance that just switching to UE 5.5 will fix the problem for you. But if not, then the ultimate solution is for us to address this issue that I just wrote: