Iris UNetObjectFilter (custom dynamic filter) linker error

Hi,

Official documentation about Iris is rather sparse (and as I noticed in several instances, slightly outdated). Epic is very quiet about Iris, hopefully it won’t be silently abandonned as it is very useful for what I’m planning for my project :face_without_mouth:.

I’m using 5.4.4 and am trying to make my own dynamic filter:

I’m stuck even before being able to start. Visual Studio outputs some linker error, even though everything looks fine to me:

1>Module.UnrealBlox.2.cpp.obj : error LNK2019: unresolved external symbol "private: static class UClass * __cdecl UNetObjectFilter::GetPrivateStaticClass(void)" (?GetPrivateStaticClass@UNetObjectFilter@@CAPEAVUClass@@XZ) referenced in function "public: static class UClass * __cdecl UNetObjectFilter::StaticClass(void)" (?StaticClass@UNetObjectFilter@@SAPEAVUClass@@XZ)
1>Module.UnrealBlox.2.cpp.obj : error LNK2019: unresolved external symbol "public: __cdecl UNetObjectFilter::UNetObjectFilter(class FVTableHelper &)" (??0UNetObjectFilter@@QEAA@AEAVFVTableHelper@@@Z) referenced in function "class UObject * __cdecl InternalVTableHelperCtorCaller<class UBloxNetObjectFilter>(class FVTableHelper &)" (??$InternalVTableHelperCtorCaller@VUBloxNetObjectFilter@@@@YAPEAVUObject@@AEAVFVTableHelper@@@Z)
1>Module.UnrealBlox.2.cpp.obj : error LNK2019: unresolved external symbol "public: virtual __cdecl UNetObjectFilter::~UNetObjectFilter(void)" (??1UNetObjectFilter@@UEAA@XZ) referenced in function "public: virtual __cdecl UBloxNetObjectFilter::~UBloxNetObjectFilter(void)" (??1UBloxNetObjectFilter@@UEAA@XZ)
1>E:\Documents\repos\UnrealBlock\Plugins\UnrealBlox\Binaries\Win64\UnrealEditor-UnrealBlox.dll : fatal error LNK1120: 3 unresolved externals

I’m using the following in my module build.cs:

SetupIrisSupport(Target);

So it is already adding “IrisCore” to the private dependency modules. I also tried adding it to the public dependency modules instead, frantically deleting Intermediates/Binaries and regenerating the VS files for the project along the way, to no avail.

Here is my header file:

#pragma once

#include "Iris/ReplicationSystem/Filtering/NetObjectFilter.h"

#include "BloxNetObjectFilter.generated.h"

UCLASS()
class UBloxNetObjectFilter : public UNetObjectFilter
{
	GENERATED_BODY()

protected:

	// UNetObjectFilter interface
	virtual void OnInit(FNetObjectFilterInitParams& Params) override;
	//virtual void AddConnection(uint32 ConnectionId) override;
	//virtual void RemoveConnection(uint32 ConnectionId) override;
	virtual bool AddObject(uint32 ObjectIndex, FNetObjectFilterAddObjectParams& Params) override;
	virtual void RemoveObject(uint32 ObjectIndex, const FNetObjectFilteringInfo& Info) override;
	virtual void UpdateObjects(FNetObjectFilterUpdateParams& Params) override;
	//virtual void PreFilter(FNetObjectPreFilteringParams&) override;
	virtual void Filter(FNetObjectFilteringParams& Params) override;
	//virtual void PostFilter(FNetObjectPostFilteringParams& Params) override;
	
};

I can also use other classes/typedefs from “Iris/ReplicationSystem/Filtering/NetObjectFilter.h” (such as UE::Net::FNetObjectFilterHandle) without linking errors so I guess the issue lies with the UNetObjectFilter class itself.

Any idea?