Question>
unreal engine 4에서 build를 했는데, 'LNK2019' 오류가 발생합니다.
문제가 일어나는 부분은 아래 부분이고요.
UPROPERTY()
FPostProcessSettings m_pps;
m_pps.BloomDirtMask->TextureReference =
SkyAmbientPostProccessVolume->Settings.BloomDirtMask->TextureReference;
오류 내용은 아래와 같습니다.
error LNK2019: unresolved external symbol "__declspec(dllimport) public: class FTextureReference
& __cdecl FTextureReference::operator=(class FTextureReference const &)"
(__imp_??4FTextureReference@@QEAAAEAV0@AEBV0@@Z) referenced in function
"public: void __cdecl ABrickSkySphere::Update(float)" (?Update@ABrickSkySphere@@QEAAXM@Z)
위 오류를 어떻게 해결하는 게 좋을까요?
-------------------------------------------------------------
Answer>
compile에서는 문제가 없고, link에서 오류가 나는 걸로 봐서는,
GUID쪽에서 문제가 있다고, 생각하고요.
그런데, unreal engine의 framework 구조상 GUID를 engine 사용자가
제어하는 건 별로 본 적이 없어서리..^^;;;;;
굳이, 그렇게 할 필요가 있는 지는 의문이 듭니다.@_@;;;;;
단순하게 생각하면..^^;;;;;
AmbientCubemap은 'class UTextureCube'의 pointer로 정의되어 있고,
이는 'class UTexture'와 'class UObject'을 상속하고 있기 때문에
operator '='으로 대입해도 문제가 발생하지 않습니다.
따라서, 질문의 source는 아래와 같이 기술할 수 있습니다.
m_pps.BloomDirtMask = SkyAmbientPostProccessVolume->Settings.BloomDirtMask;
operator '=' 내부적으로 reference count의 가감이 이루어지기 때문에
객체의 파괴는 garbage collector가 알아서 처리하게 됩니다.^^
따라서, reference 관련 문제는 engine 내부에 맡기시고,
만드시려는 기능에 집중하시는 게 좋을 듯 싶네요.^^
Tag:
안기훈, Kee Hoon Ahn, 언리얼, Unreal, UDK, iPhone, iPad, app, 앱, iOS