How to fix 'symbol lookup error' in my Unreal project?

别等时光非礼了梦想. 提交于 2019-12-11 15:36:22

问题


I'm trying to write an Actor in Unreal Engine C++, that gets texture data from a render target.

I have an Actor class:

#include "RenderActor.h"
#include "Engine.h"
#include <stdio.h>

// Sets default values
ARenderActor::ARenderActor()
{
    // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = true;
    UE_LOG(LogTemp, Warning, TEXT("Init RenderActor\n"));
}

// Called when the game starts or when spawned
void ARenderActor::BeginPlay()
{
    Super::BeginPlay();
    UE_LOG(LogTemp, Warning, TEXT("BeginPlay RenderActor\n"));

    UTextureRenderTarget2D* target = GetTextureByName(TEXT("MyCanvas"));

}

// Called every frame
void ARenderActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

UTextureRenderTarget2D* GetTextureByName(const TCHAR* name)
{
    return LoadObject<UTextureRenderTarget2D>(NULL, name, NULL, LOAD_None, NULL);
}

int ARenderActor::GetTextureData(UTextureRenderTarget2D* TextureRenderTarget ,void* out_ptr,int length)
{
    int sx=TextureRenderTarget->SizeX,sy=TextureRenderTarget->SizeY;
    TArray<FColor> SurfData;
    FRenderTarget *renderTarget = TextureRenderTarget->GameThread_GetRenderTargetResource();
    check((sx*sy*4)<=length);
    renderTarget->ReadPixels(SurfData);
    memcpy(out_ptr,reinterpret_cast<void*>(SurfData.GetData()),sx*sy*4);
    return sx*sy*4;
}

There is a .h below:

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Runtime/Engine/Classes/Components/WindDirectionalSourceComponent.h"
#include "Runtime/Engine/Classes/Engine/WindDirectionalSource.h"
#include "Runtime/CoreUObject/Public/UObject/UObjectBaseUtility.h"
#include "Runtime/CoreUObject/Public/UObject/UObjectGlobals.h"
#include "Runtime/Engine/Classes/Engine/TextureRenderTarget2D.h"
#include "RenderActor.generated.h"

UCLASS()
class MEMRENDER_API ARenderActor : public AActor
{
    GENERATED_BODY()

public: 
    // Sets default values for this actor's properties
    ARenderActor();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public: 
    // Called every frame
    virtual void Tick(float DeltaTime) override;

    UTextureRenderTarget2D* GetTextureByName(const TCHAR* name);

    int GetTextureData(UTextureRenderTarget2D* TextureRenderTarget ,void* out_ptr,int length);

};

Now I can compile it on Ubuntu 18.04, but get a runtime error:

/home/starrabb1t/UnrealEngine/Engine/Binaries/Linux/UE4Editor: symbol lookup error: /home/starrabb1t/Documents/Unreal Projects/MemRender/Binaries/Linux/libUE4Editor-MemRender-7856.so: undefined symbol: _ZN12ARenderActor16GetTextureByNameEPKDs

P.S: I have a scene with RenderActor object. Also I created render target MyCanvas in root of content directory.

来源:https://stackoverflow.com/questions/57817858/how-to-fix-symbol-lookup-error-in-my-unreal-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!