rLogをWindowsでDLLとしてビルドするように取り組んでいますが、rlog名前空間の一部のグローバルシンボルに関連する未定義のシンボルエラーが発生していました。具体的には、RLogChannel.cppにあります。
namespace rlog {
...
RLogChannel *_RLDebugChannel = GetGlobalChannel( "debug", Log_Debug );
RLogChannel *_RLInfoChannel = GetGlobalChannel( "info", Log_Info );
RLogChannel *_RLWarningChannel = GetGlobalChannel( "warning", Log_Warning );
RLogChannel *_RLErrorChannel = GetGlobalChannel( "error", Log_Error );
...
};
問題は、1)エクスポートされなかった、2)他のものがアクセスできるように、ヘッダーで宣言されていないことだと思いました。そこで、(RLOG_DECLマクロを介して)__ declspec(dllexport)を追加し、ヘッダーに次のように配置しました。
namespace rlog {
...
RLOG_DECL extern RLogChannel *_RLDebugChannel;
RLOG_DECL extern RLogChannel *_RLInfoChannel;
RLOG_DECL extern RLogChannel *_RLWarningChannel;
RLOG_DECL extern RLogChannel *_RLErrorChannel;
...
};
しかし、RLogChannel.cppで変数をどのように宣言しても、ヘッダーで変数を外部化したにもかかわらず、再定義エラーが発生します...これを行う正しい方法は何ですか?簡単そうに見えますが、頭を包み込むことはできません。
編集:エラーメッセージ
Error 12 error C2086: 'rlog::RLogChannel *rlog::_RLDebugChannel' : redefinition rlog-1.4\rlog\RLogChannel.cpp 45 rlog
(4つのシンボルすべてで同じ)
編集:何が起こったのかわかりません、コードは以前はまったく同じですが、今はコンパイルされます(MSVCの奇妙さのように感じます...)、残念ながら、ライブラリにリンクするときにシンボルが未解決として表示されます