다른 모듈의 UInterface 캐스팅 시 LNK1120 에러 발생

전지훈·2021년 7월 19일
0

Unreal

목록 보기
4/25
post-thumbnail

평소처럼 Rider의 자동완성 기능을 통해 UInterface를 생성하고 이 UInterface를 다른 모듈의 코드에서 캐스팅하는 작업을 수행하였다.

#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "DefaultAI.generated.h"

UINTERFACE()
class UDefaultAI : public UInterface
{
	GENERATED_BODY()
};

class AI_API IDefaultAI
{
	GENERATED_BODY()
public:
	virtual class AAIController* GetAIController() const = 0;
};

하지만, 이후 컴파일을 진행하자 다른 모듈의 코드에서 해당 인터페이스로 캐스팅을 수행할 때 컴파일은 완료 되었으나, 아래와 같이 LNK1120 에러가 발생하였다. 모듈간의 관계 설정이 완료된 상태에서도 이와 같은 에러가 발생하였다.

  unresolved external symbol "private: static class UClass * __cdecl UDefaultAI::GetPrivateStaticClass(void)" (?GetPrivateStaticClass@UDefaultAI@@CAPEAVUClass@@XZ) referenced in function "public: virtual void __cdecl UAIDataProvider_Distance::BindData(class UObject const &,int)" (?BindData@UAIDataProvider_Distance@@UEAAXAEBVUObject@@H@Z)
  UE4Editor-LF-Win64-DebugGame.dll: [LNK1120] 1 unresolved externals
  Microsoft.MakeFile.targets(44, 5): [MSB3073] ""C:\Users\Jihun Jeon\Documents\4.26.2\Engine\Build\BatchFiles\Build.bat" LFEditor Win64 DebugGame -Project="C:\Users\Jihun Jeon\Documents\notd\LF.uproject" -WaitMutex -FromMsBuild" 명령이 종료되었습니다(코드: 6).

아래와 같이 UInterface 부분에도 소속된 모듈(여기선 AI_API)을 기입하면 문제가 해결된다.

#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "DefaultAI.generated.h"

UINTERFACE()
class AI_API UDefaultAI : public UInterface
{
	GENERATED_BODY()
};

class AI_API IDefaultAI
{
	GENERATED_BODY()
public:
	virtual class AAIController* GetAIController() const = 0;
};

주요 문제점은 Rider의 자동완성 기능을 활용한 경우, 다른 클래스들과 달리 CPP 인터페이스와 UInterface 코드가 각각 생기는 UInterface는 DLL Export를 위한 매크로(여기선 AI_API)를 실제 CPP 인터페이스쪽 코드에만 붙여줘서 생긴 문제인 것 같다.

profile
10%의 확신과 90%의 어.. 이게 왜 되지?

0개의 댓글