概要
プラグインの中でカスタムログカテゴリを定義してプロジェクト内で使用したときに未定義エラーとなったときの対処
やろうと思ったこと & 問題点
自作プラグインの中にカスタムログカテゴリを追加して使いたかったのですが
プロジェクト内で使おうとしたら未定義エラーになってしまいました
LogMhというカスタムログカテゴリを使おうとして下記のエラーが発生
0>Test.cpp.obj: Error : LNK2001: 外部シンボル "struct FLogCategoryLogMh LogMh" (?LogMh@@3UFLogCategoryLogMh@@A) は未解決です
修正前の定義
LogMh.h
#pragma once
#include "CoreMinimal.h"
DECLARE_LOG_CATEGORY_EXTERN(LogMh, Log, All);
LogMh.cpp
#include "Mh/LogMh.h"
DEFINE_LOG_CATEGORY(LogMh);
原因
APIマクロが欠落していました
クラスなどではつけることは理解していましたが、ここでも必要とは…
修正後の定義
プラグインの名前がXXとして、XX_APIを頭に付ける必要がありました
LogMh.h
#pragma once
#include "CoreMinimal.h"
// ここの頭につける
XX_API DECLARE_LOG_CATEGORY_EXTERN(LogMh, Log, All);
LogMh.cpp
#include "Mh/LogMh.h"
DEFINE_LOG_CATEGORY(LogMh);
最後に
クラス定義などでは下記のように付けるのは当然だと思っていたのですが、
マクロでも必要とは盲点でした…
UCLASS()
class XX_API UFooBar : public UObject
{
GENERATED_BODY()
};