我正在努力让 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)它们没有在标题中声明,所以其他东西可以访问它们。所以我向它们添加了一个 __declspec(dllexport) (通过 RLOG_DECL 宏),并在标题中输入:
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 的怪异......),不幸的是,当链接到我的库时,符号仍然显示为未解析