[Bug] ULevel throws linker errors

I am trying to load a actors from a level. Directly getting the pointer to the level through the project raises no problems.

m_CarLevel = PackageWorld->PersistentLevel;

but using the new keyword to create a pointer throws up linker levels. I need to duplicate this loaded level.

Error	4	error LNK2019: unresolved external symbol "public: virtual __cdecl ULevel::~ULevel(void)" (??1ULevel@@UEAA@XZ) referenced in function "public: virtual void * __cdecl ULevel::`scalar deleting destructor'(unsigned int)" (??_GULevel@@UEAAPEAXI@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	2	error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl FRenderCommandFence::FRenderCommandFence(class FRenderCommandFence const &)" (__imp_??0FRenderCommandFence@@QEAA@AEBV0@@Z) referenced in function "public: __cdecl ULevel::ULevel(class ULevel const &)" (??0ULevel@@QEAA@AEBV0@@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	1	error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl FRenderCommandFence::~FRenderCommandFence(void)" (__imp_??1FRenderCommandFence@@QEAA@XZ) referenced in function "int `public: __cdecl ULevel::ULevel(class dtor$9 const &)'::`1'::dtor$9" (?dtor$9@?0???0ULevel@@QEAA@AEBV0@@Z@4HA)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	3	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevelBase::Serialize(class FArchive &)" (?Serialize@ULevelBase@@UEAAXAEAVFArchive@@@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	5	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::Serialize(class FArchive &)" (?Serialize@ULevel@@UEAAXAEAVFArchive@@@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	15	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::RemoveUserDataOfClass(class TSubclassOf<class UAssetUserData>)" (?RemoveUserDataOfClass@ULevel@@UEAAXV?$TSubclassOf@VUAssetUserData@@@@@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	13	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::PreSave(void)" (?PreSave@ULevel@@UEAAXXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	10	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::PreEditUndo(void)" (?PreEditUndo@ULevel@@UEAAXXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	12	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::PostLoad(void)" (?PostLoad@ULevel@@UEAAXXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	11	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::PostEditUndo(void)" (?PostEditUndo@ULevel@@UEAAXXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	8	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::FinishDestroy(void)" (?FinishDestroy@ULevel@@UEAAXXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	18	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::ClearMovieSceneBindings(void)" (?ClearMovieSceneBindings@ULevel@@UEAAXXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	6	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::BeginDestroy(void)" (?BeginDestroy@ULevel@@UEAAXXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	17	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::AddMovieSceneBindings(class UMovieSceneBindings *)" (?AddMovieSceneBindings@ULevel@@UEAAXPEAVUMovieSceneBindings@@@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	14	error LNK2001: unresolved external symbol "public: virtual void __cdecl ULevel::AddAssetUserData(class UAssetUserData *)" (?AddAssetUserData@ULevel@@UEAAXPEAVUAssetUserData@@@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	9	error LNK2001: unresolved external symbol "public: virtual class UWorld * __cdecl ULevel::GetWorld(void)const " (?GetWorld@ULevel@@UEBAPEAVUWorld@@XZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	16	error LNK2001: unresolved external symbol "public: virtual class UAssetUserData * __cdecl ULevel::GetAssetUserDataOfClass(class TSubclassOf<class UAssetUserData>)" (?GetAssetUserDataOfClass@ULevel@@UEAAPEAVUAssetUserData@@V?$TSubclassOf@VUAssetUserData@@@@@Z)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject
Error	7	error LNK2001: unresolved external symbol "public: virtual bool __cdecl ULevel::IsReadyForFinishDestroy(void)" (?IsReadyForFinishDestroy@ULevel@@UEAA_NXZ)	E:\CarProject\Intermediate\ProjectFiles\Module.CarProject.cpp.obj	CarProject

I also am having this problem compiling with even a blank ULevel generated from the editor. This file alone included in the project causes the above linker errors.

#include "Engine/Level.h"
#include "TestLevel.generated.h"

/**
 * A level that has pans and slots, and sentences.
 */
UCLASS()
class TEST_API UTestLevel : public ULevel
{
	GENERATED_UCLASS_BODY()
};

Hi,

Thank you for bringing this to our attention. I was able to reproduce the issue, and have submitted a report to have this investigated further (UE-5595).

Currently ULevel is not really set up to be subclassed externally. Have you looked at using the IInterface_AssetUserData interface to store additional information on the level rather than subclassing it?

Thank you for pointing that out, I also realized that I should have been subclassing GameInstance, but I’ll definitely checkout AssetUserData when I need stuff associated with levels directly.