Update: found solution
For LNK2019
In Modules.Build.cs
add GameplayTags
to the PublicDependencyModuleNames
Modules.Build.cs
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class Modules : ModuleRules
{
public Modules(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EnhancedInput",
"GameplayTags",
"TagsModule"
});
PrivateDependencyModuleNames.AddRange(new string[] { });
// Uncomment if you are using Slate UI
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// Uncomment if you are using online features
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
}
}
For LNK2001
Add <ModuleName>_API
(in my case TagsModule_API
) before UE_DECLARE_GAMEPLAY_TAG_EXTERN
and UE_DEFINE_GAMEPLAY_TAG
macros
Tags.h
#pragma once
#include "CoreMinimal.h"
#include "NativeGameplayTags.h"
TAGSMODULE_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_Test);
Tags.cpp
#include "Tags.h"
TAGSMODULE_API UE_DEFINE_GAMEPLAY_TAG(TAG_Test,"Test");
Problem
I’m encountering LNK2019 and LNK2001 errors when using gameplay tags declared and defined in one custom module (TagsModule in my case) and used in another (Modules).
LNK2019
MyActor.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl FGameplayTagContainer::AddTag(struct FGameplayTag const &)" (__imp_?AddTag@FGameplayTagContainer@@QEAAXAEBUFGameplayTag@@@Z) referenced in function "public: __cdecl AMyActor::AMyActor(void)" (??0AMyActor@@QEAA@XZ)
LNK2001
MyActor.cpp.obj : error LNK2001: unresolved external symbol "class FNativeGameplayTag TAG_Test" (?TAG_Test@@3VFNativeGameplayTag@@A)
UnrealBuildTool/Log.txt
Log started at 05/20/2025 21:54:34 (2025-05-20T16:54:34Z)
No config file at C:\ProgramData\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
No config file at C:\Users\admin\AppData\Local\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
Configuration will be read from:
C:\Users\admin\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
Setting temp directory to 'C:\Users\admin\AppData\Local\Temp\UnrealBuildTool\619b1ae5'
Registering build platform: UnrealBuildTool.AndroidPlatformFactory
Registering build platform: UnrealBuildTool.IOSPlatformFactory
Registering build platform: UnrealBuildTool.LinuxPlatformFactory
Registering build platform: UnrealBuildTool.MacPlatformFactory
Registering build platform: UnrealBuildTool.TVOSPlatformFactory
Registering build platform: UnrealBuildTool.WindowsPlatformFactory
Found Windows 10 SDK root at C:\Program Files (x86)\Windows Kits\10 (1)
Found Windows 10 SDK root at C:\Program Files (x86)\Windows Kits\10 (2)
Found Windows 10 SDK version 10.0.22621.0 at C:\Program Files (x86)\Windows Kits\10
Found Universal CRT version 10.0.22621.0 at C:\Program Files (x86)\Windows Kits\10
Found Windows 10 SDK version 10.0.26100.0 at C:\Program Files (x86)\Windows Kits\10
Found Universal CRT version 10.0.26100.0 at C:\Program Files (x86)\Windows Kits\10
Win64 Installed SDK(s): MinVersion_Sdk=10.0.19041.0, MaxVersion_Sdk=10.9.99999.0, CurrentVersion_Sdk=10.0.22621.0, Version_AutoSdk=10.0.22621.0, CurrentVersion_AutoSdk=
Registering build platform: Win64 - buildable: True
Registering build platform: UnrealBuildTool.VisionOSPlatformFactory
Command line: "E:\Unreal Engine\UE_5.5\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" ModulesEditor Win64 Development "-Project=E:\Unreal Engine\Projects\Modules\Modules.uproject" -WaitMutex -FromMsBuild -architecture=x64
Log file: C:\Users\admin\AppData\Local\UnrealBuildTool\Log.txt
Deleting old log file: C:\Users\admin\AppData\Local\UnrealBuildTool\Log-backup-2024.05.06-13.41.49.txt
Generated code is up to date.
UnrealEditor-Modules.dll: Produced item "E:\Unreal Engine\Projects\Modules\Binaries\Win64\UnrealEditor-Modules.dll" doesn't exist.
ModulesEditor.target: Prerequisite E:\Unreal Engine\Projects\Modules\Binaries\Win64\UnrealEditor-Modules.dll doesn't exist.
UnrealEditor-Modules.dll: Produced item "E:\Unreal Engine\Projects\Modules\Binaries\Win64\UnrealEditor-Modules.pdb" doesn't exist.
Checking for live coding mutex: Global\LiveCoding_E++Unreal Engine+UE_5.5+Engine+Binaries+Win64+UnrealEditor.exe
Building ModulesEditor...
Using Visual Studio 2022 14.38.33144 toolchain (D:\Programs\VisualStudioMisc\Visual Studio Community\VC\Tools\MSVC\14.38.33130) and Windows 10.0.22621.0 SDK (C:\Program Files (x86)\Windows Kits\10).
Executing up to 16 actions based on MaxProcessorCount override
Using Unreal Build Accelerator local executor to run 2 action(s)
Storage capacity 40Gb
Deleting old log file: C:\Users\admin\AppData\Local\UnrealBuildTool\Log-backup-2025.05.20-15.56.17.uba
---- Starting trace: 250520_215434 ----
UbaSessionServer - Disable remote execution (remote sessions will finish current processes)
------ Building 2 action(s) started ------
[1/2] Link [x64] UnrealEditor-Modules.dll
Creating object E:\Unreal Engine\Projects\Modules\Binaries\Win64\UnrealEditor-Modules.exp
MyActor.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl FGameplayTagContainer::AddTag(struct FGameplayTag const &)" (__imp_?AddTag@FGameplayTagContainer@@QEAAXAEBUFGameplayTag@@@Z) referenced in function "public: __cdecl AMyActor::AMyActor(void)" (??0AMyActor@@QEAA@XZ)
MyActor.cpp.obj : error LNK2001: unresolved external symbol "class FNativeGameplayTag TAG_Test" (?TAG_Test@@3VFNativeGameplayTag@@A)
E:\Unreal Engine\Projects\Modules\Binaries\Win64\UnrealEditor-Modules.dll : fatal error LNK1120: 2 unresolved externals
Link [x64] UnrealEditor-Modules.dll: Exited with error code 1120 . The build will fail.
Link [x64] UnrealEditor-Modules.dll: WorkingDirectory E:\Unreal Engine\UE_5.5\Engine\Source
Link [x64] UnrealEditor-Modules.dll: D:\Programs\VisualStudioMisc\Visual Studio Community\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64\link.exe @"E:\Unreal Engine\Projects\Modules\Intermediate\Build\Win64\x64\UnrealEditor\Development\Modules\UnrealEditor-Modules.dll.rsp"
Trace file written to C:/Users/admin/AppData/Local/UnrealBuildTool/Log.uba with size 3.1kb
Total time in Unreal Build Accelerator local executor: 1.11 seconds
Total execution time: 1.83 seconds
CompilationResultException: OtherCompilationError
at UnrealBuildTool.ActionGraph.ExecuteActionsAsync(BuildConfiguration BuildConfiguration, List`1 ActionsToExecute, List`1 TargetDescriptors, ILogger Logger, IActionArtifactCache actionArtifactCache) in E:\Unreal Engine\UE_5.5\Engine\Source\Programs\UnrealBuildTool\System\ActionGraph.cs:line 471
at UnrealBuildTool.BuildMode.BuildAsync(TargetMakefile[] Makefiles, List`1 TargetDescriptors, BuildConfiguration BuildConfiguration, BuildOptions Options, FileReference WriteOutdatedActionsFile, ILogger Logger, String ActionTypeFilter) in E:\Unreal Engine\UE_5.5\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 825
at UnrealBuildTool.BuildMode.BuildAsync(List`1 TargetDescriptors, BuildConfiguration BuildConfiguration, ISourceFileWorkingSet WorkingSet, BuildOptions Options, FileReference WriteOutdatedActionsFile, ILogger Logger, Boolean bSkipPreBuildTargets, String ActionTypeFilter) in E:\Unreal Engine\UE_5.5\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 417
at UnrealBuildTool.BuildMode.ExecuteAsync(CommandLineArguments Arguments, ILogger Logger) in E:\Unreal Engine\UE_5.5\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 257
at UnrealBuildTool.UnrealBuildTool.Main(String[] ArgumentsArray) in E:\Unreal Engine\UE_5.5\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:line 687
WriteFileIfChanged() wrote 0 changed files of 0 requested writes.
Timeline:
[ 0.000]
[ 0.000](+1.844) <unknown>
[ 1.844]
Project Setup
- UE version: 5.5.4
- Project structure
Code
Modules
Actor.h
#pragma once
#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class MODULES_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
FGameplayTagContainer TagContainer;
};
Actor.cpp
#include "MyActor.h"
#include "Tags.h"
AMyActor::AMyActor()
{
TagContainer.AddTag(TAG_Test);
}
Modules.h
#pragma once
#include "CoreMinimal.h"
Modules.cpp
#include "Modules.h"
#include "Modules/ModuleManager.h"
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, Modules, "Modules" );
Modules.Build.cs
using UnrealBuildTool;
public class Modules : ModuleRules
{
public Modules(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EnhancedInput",
"TagsModule"
});
PrivateDependencyModuleNames.AddRange(new string[] { });
// Uncomment if you are using Slate UI
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// Uncomment if you are using online features
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
}
}
TagsModule
Tags.h
#pragma once
#include "CoreMinimal.h"
#include "NativeGameplayTags.h"
UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_Test);
Tags.cpp
#include "Tags.h"
UE_DEFINE_GAMEPLAY_TAG(TAG_Test, "Test");
TagsModule.h
#pragma once
#include "CoreMinimal.h"
TagsModule.cpp
#include "TagsModule.h"
#include "Modules/ModuleManager.h"
IMPLEMENT_MODULE( FDefaultModuleImpl, TagsModule);
TagsModule.Build.cs
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class TagsModule : ModuleRules
{
public TagsModule(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EnhancedInput",
"GameplayTags"
});
PrivateDependencyModuleNames.AddRange(new string[] { });
// Uncomment if you are using Slate UI
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// Uncomment if you are using online features
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
}
}
Target.cs and .uproject
Modules.Target.cs
using UnrealBuildTool;
using System.Collections.Generic;
public class ModulesTarget : TargetRules
{
public ModulesTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_5;
ExtraModuleNames.Add("Modules");
ExtraModuleNames.Add("TagsModule");
}
}
ModulesEditor.Target.cs
using UnrealBuildTool;
using System.Collections.Generic;
public class ModulesEditorTarget : TargetRules
{
public ModulesEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_5;
ExtraModuleNames.Add("Modules");
ExtraModuleNames.Add("TagsModule");
}
}
Modules.uproject
{
"FileVersion": 3,
"EngineAssociation": "5.5",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "Modules",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine"
]
},
{
"Name": "TagsModule",
"Type": "Runtime",
"LoadingPhase": "Default"
}
],
"Plugins": [
{
"Name": "ModelingToolsEditorMode",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "GameplayAbilities",
"Enabled": true
}
]
}
What I’ve tried:
- Adding
GameplayTags
module toPublicDependencyModuleNames
inModules.Build.cs
. - Deleting
.sln
,Saved
,Intermediate
,DerivedDataCache
,Binaries
,.vs
,.idea
folders and thenGenerate Visual Studio project files
. - Creating new UE project with different modules names.
- Creating new module with class that uses tag declared in different module.
Why I think my code should work
- In
NativeGameplayTags.h
there’s a comment about macroUE_DECLARE_GAMEPLAY_TAG_EXTERN
that “allow other modules or code to use the created tag variable”
/**
* Declares a native gameplay tag that is defined in a cpp with UE_DEFINE_GAMEPLAY_TAG to allow other modules or code to use the created tag variable.
*/
#define UE_DECLARE_GAMEPLAY_TAG_EXTERN(TagName) extern FNativeGameplayTag TagName;
- I’ve added
TagsModule
to theModule.Build.cs
.