Я работаю над получением rLog для создания DLL под окнами, и я получал неопределенные ошибки символов, связанные с некоторыми глобальными символами в пространстве имен rlog. В частности они в RLogChannel.cpp:Как правильно использовать extern в пространстве имен?
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 я получаю ошибку переопределение, несмотря на мой externing их в заголовке ... Каков правильный способ сделать это? Похоже, это должно быть просто, но я не могу полностью обвести вокруг себя голову.
Edit: сообщение об ошибке
Error 12 error C2086: 'rlog::RLogChannel *rlog::_RLDebugChannel' : redefinition rlog-1.4\rlog\RLogChannel.cpp 45 rlog
(то же самое для всех 4-х символов)
Edit: я не знаю, что случилось, код точно так же, и раньше, но теперь он будет компилировать (чувствует как странность MSVC ...), к сожалению, символы по-прежнему отображаются как неразрешенные при подключении к моей библиотеке
что точное сообщение об ошибке –
Обновлено выше, так что отформатирован немного лучше, чем я? можно отправить здесь. –
Кажется, что-то importa nt не учитывается. Можете ли вы предоставить краткий и полный тестовый пример (например, один файл, который я могу передать компилятору как есть), который дает эту ошибку? – 2010-02-11 22:07:55