UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LinkerManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 LinkerManager.h: Unreal object linker manager
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
11#include "Misc/CoreMisc.h"
12#include "Misc/ScopeLock.h"
13#include "HAL/ThreadSafeBool.h"
14
16{
17public:
20
21 static FLinkerManager& Get();
22
24 {
25#if THREADSAFE_UOBJECTS
27#endif
28 OutLoaders = ObjectLoaders;
29 }
30
32 {
33#if THREADSAFE_UOBJECTS
35#endif
36 OutLoaders = MoveTemp(ObjectLoaders);
37 check(ObjectLoaders.Num() == 0);
38 }
39
41 {
42#if THREADSAFE_UOBJECTS
44#endif
45 ObjectLoaders.Add(LinkerLoad);
46 }
47
49 {
50 {
51#if THREADSAFE_UOBJECTS
53#endif
54 ObjectLoaders.Remove(LinkerLoad);
55 }
56 {
57#if THREADSAFE_UOBJECTS
59#endif
60 LoadersWithNewImports.Remove(LinkerLoad);
61 }
62 }
63
71
73 {
74#if THREADSAFE_UOBJECTS
76#endif
77 LoadersWithNewImports.Add(LinkerLoad);
78 }
79
87
89 {
90#if THREADSAFE_UOBJECTS
92#endif
93 LoadersWithForcedExports.Add(LinkerLoad);
94 }
95
96#if !UE_BUILD_SHIPPING && !UE_BUILD_TEST
98 {
99 FScopeLock LiveLinkersLock(&LiveLinkersCritical);
100 LiveLinkers.Add(Linker);
101 }
102
104 {
105 FScopeLock LiveLinkersLock(&LiveLinkersCritical);
106 LiveLinkers.Remove(Linker);
107 }
108#endif
109
111 void ResetLinkerExports(UPackage* InPackage);
112
115
118
121
124
130
132 void DeleteLinkers();
133
136
137protected:
138 // FSelfRegisteringExec interface
139 virtual bool Exec_Dev(class UWorld* InWorld,const TCHAR* Cmd,FOutputDevice& Ar) override;
140
141private:
142
144 TSet<FLinkerLoad*> ObjectLoaders;
145#if THREADSAFE_UOBJECTS
147#endif
148
150 TSet<FLinkerLoad*> LoadersWithNewImports;
151#if THREADSAFE_UOBJECTS
153#endif
154#if !UE_BUILD_SHIPPING && !UE_BUILD_TEST
156 FCriticalSection LiveLinkersCritical;
157 TSet<FLinkerLoad*> LiveLinkers;
158#endif
159
161 TSet<FLinkerLoad*> LoadersWithForcedExports;
162#if THREADSAFE_UOBJECTS
164#endif
165
167 TSet<FLinkerLoad*> PendingCleanupList;
168#if THREADSAFE_UOBJECTS
170#endif
171 FThreadSafeBool bHasPendingCleanup;
172};
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition LinkerLoad.h:124
Definition LinkerManager.h:16
FORCEINLINE void AddLiveLinker(FLinkerLoad *Linker)
Definition LinkerManager.h:97
FORCEINLINE void GetLoadersWithForcedExportsAndEmpty(TSet< FLinkerLoad * > &OutLoaders)
Definition LinkerManager.h:80
FLinkerManager()
Definition LinkerManager.cpp:21
FORCEINLINE void RemoveLiveLinker(FLinkerLoad *Linker)
Definition LinkerManager.h:103
FORCEINLINE void GetLoadersAndEmpty(TSet< FLinkerLoad * > &OutLoaders)
Definition LinkerManager.h:31
~FLinkerManager()
Definition LinkerManager.cpp:26
static FLinkerManager & Get()
Definition LinkerManager.cpp:15
void EnsureLoadingComplete(UPackage *Package)
Definition LinkerManager.cpp:252
virtual bool Exec_Dev(class UWorld *InWorld, const TCHAR *Cmd, FOutputDevice &Ar) override
Definition LinkerManager.cpp:30
void ResetLinkerExports(UPackage *InPackage)
Definition LinkerManager.cpp:98
FORCEINLINE void AddLoaderWithForcedExports(FLinkerLoad *LinkerLoad)
Definition LinkerManager.h:88
FORCEINLINE void AddLoader(FLinkerLoad *LinkerLoad)
Definition LinkerManager.h:40
FORCEINLINE void RemoveLoaderFromObjectLoadersAndLoadersWithNewImports(FLinkerLoad *LinkerLoad)
Definition LinkerManager.h:48
void DissociateImportsAndForcedExports()
Definition LinkerManager.cpp:270
FORCEINLINE void AddLoaderWithNewImports(FLinkerLoad *LinkerLoad)
Definition LinkerManager.h:72
void DeleteLinkers()
Definition LinkerManager.cpp:320
void ResetLoaders(UObject *InPkg)
Definition LinkerManager.cpp:111
FORCEINLINE void GetLoaders(TSet< FLinkerLoad * > &OutLoaders)
Definition LinkerManager.h:23
FORCEINLINE void GetLoadersWithNewImportsAndEmpty(TSet< FLinkerLoad * > &OutLoaders)
Definition LinkerManager.h:64
void RemoveLinker(FLinkerLoad *Linker)
Definition LinkerManager.cpp:354
Definition OutputDevice.h:133
Definition ScopeLock.h:141
Definition CoreMisc.h:28
Definition ThreadSafeBool.h:17
Definition Object.h:95
Definition Package.h:216
Definition World.h:918
Definition Linker.cpp:38