저는 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) 그들은 그래서 다른 일을 액세스 할 수 헤더에 선언되지 않았다. 그래서 나는 그들에게합니다 (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의 변수를 선언 아무리 내가에도 불구하고 재정의 오류 내 머리글에있는 이들을 제외하고 ...이 작업을 수행하는 올바른 방법은 무엇입니까? 그것이 직설적이어야하지만 나는 그것의 주위에 나의 머리를 아주 감쌀 수 없다.
는편집 : 오류 메시지 (4 개 기호 같은)
Error 12 error C2086: 'rlog::RLogChannel *rlog::_RLDebugChannel' : redefinition rlog-1.4\rlog\RLogChannel.cpp 45 rlog
는
는 편집 : 무슨 일이 있었는지 모르는 (코드는 이전과 동일한 정확히하지만 지금은 컴파일 느낌 MSVC와 같은 이상한 점 ...), 불행히도 내 라이브러리에 링크 할 때 여전히 기호가 해결되지 않은 것으로 표시됩니다.
? 여기에 게시 할 수 있습니다. –
무엇 –
뭔가 흡사합니다. NT는 질문에서 제외되었습니다. 이 오류를 제공하는 간결하고 완전한 테스트 케이스 (예 : 컴파일러에 그대로 전달할 수있는 파일 하나)를 제공 할 수 있습니까? –