我正在努力讓rLog在Windows下作爲一個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聲明變量,我得到一個重新定義的錯誤,儘管我將他們排在頭上......這樣做的正確方法是什麼?似乎它應該是直截了當的,但我不能完全包圍它。
編輯:錯誤信息
Error 12 error C2086: 'rlog::RLogChannel *rlog::_RLDebugChannel' : redefinition rlog-1.4\rlog\RLogChannel.cpp 45 rlog
(同樣爲所有4個符號)
編輯:我不知道發生了什麼,代碼是完全以前一樣,但現在它會編譯(感覺就像MSVC的怪異...),不幸的是,鏈接到我的庫時,符號仍然顯示爲未解決的問題
所以它的格式比我更好一點什麼上面更新了確切的錯誤信息 – 2010-02-11 21:06:13
?可以在這裏發佈。 – 2010-02-11 21:21:26
好像是一些重要的東西NT已被排除在問題之外。您能否提供一個簡潔而完整的測試用例(例如,我可以傳遞給編譯器的一個文件),從而導致此錯誤? – 2010-02-11 22:07:55