c++ - 如何修复我的虚幻项目中的“符号查找错误”?
问题描述
我正在尝试在 Unreal Engine C++ 中编写一个从渲染目标获取纹理数据的 Actor。
我有一个演员类:
#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;
}
下面有一个.h:
#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);
};
现在我可以在 Ubuntu 18.04 上编译它,但是得到一个运行时错误:
/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
PS:我有一个带有 RenderActor 对象的场景。我还在内容目录的根目录中创建了渲染目标 MyCanvas。
解决方案
推荐阅读
- javascript - Javascript 图像预览
- mysql - 如果其中一个值在 Mysql 中有特定变量,如何改进选择范围
- protractor - 量角器中文本字段的值 - 未定义
- html - 如何均匀地间隔下拉框?
- c# - 如何在 c# Windows 窗体中将带十进制的文本框字符串转换为十进制。
- django - Django ORM 在一个查询中加入多对多关系
- amazon-web-services - AWS SQS 与单个工作人员?
- angular - 以角度 6 从 html 导出 Pdf
- python - df.plot.scatter 如何更改第二个 y 轴的大小?
- javascript - 在冲突之前创建引导日期选择器对象