코드는 0.6.5버젼으로 작업을 했습니다.
halfnetworklib의 빌드는 문제가 없었는데 이를 사용하는 다른 프로젝트에서 몇몇 문제가 발생했습니다.
빌드 에러는 아래와 같은 메세지가 있었으며...
===========================================================================
오류 20 error C2039: 'atof' : 'ACE_OS'의 멤버가 아닙니다. e:\work\rs2online
\redstone2 code\redstone2\code\halfnetworklib\include
\datatypeconvertor.h 65
===========================================================================
이를 _tstof로 임시 대체하여 빌드는 완성하여도 아래 링크 에러들이 발생하였습니다.
(ACE_HAS_WCHAR 키워드는 정상적으로 선언되어 있었습니다.)
===========================================================================
error LNK2019: "public: void __cdecl HalfNetwork::Logger::Log(char
const *,...)" (?Log@Logger@HalfNetwork@@QAAXPBDZZ) 외부 기호(참조 위치: _wmain
함수)에서 확인하지 못했습니다.
error LNK2019: "public: bool __thiscall
HalfNetwork::SimpleConfig::ReadFile(char const *)" (?
ReadFile@SimpleConfig@HalfNetwork@@QAE_NPBD@Z) 외부 기호(참조 위치: _wmain 함수)에
서 확인하지 못했습니다.
error LNK2001: "public: static int __cdecl
ACE_Object_Manager::at_exit(class ACE_Cleanup *,void *)" (?
at_exit@ACE_Object_Manager@@SAHPAVACE_Cleanup@@PAX@Z) 외부 기호를 확인할 수 없습니
다.
error LNK2001: "public: virtual int __thiscall
ACE_Shared_Object::info(char * *,unsigned int)const " (?
info@ACE_Shared_Object@@UBEHPAPADI@Z) 외부 기호를 확인할 수 없습니다.
.
.
(이후 이와 유사한 링크에러 30여개가 발생하였습니다.)
===========================================================================
모든 프로젝트의 속성에 _UNICODE가 선언되어 있는데 ACE_TCHAR 를 char로 인식하는게 이상해서 일단 제 프로젝트
에
ACE_USES_WCHAR를 선언하자 char 관련된 링크 에러는 모두 사라졌습니다.
ace의 config.h 에 아래 내용이 선언되어 있는 것은 확인 했는데 왜 이 에러가 발생하는지에 대한 원인은 아직 찾지 못했
습니다.
===========================================================================
#ifdef _UNICODE
#define ACE_USES_WCHAR
#endif
===========================================================================
이후 두가지 외부 참조 링크 에러가 나는데 아래와 같습니다.
===========================================================================
error LNK2001: "public: static int __cdecl
ACE_Object_Manager::at_exit(class ACE_Cleanup *,void *)" (?
at_exit@ACE_Object_Manager@@SAHPAVACE_Cleanup@@PAX@Z) 외부 기호를 확인할 수 없습니
다.
error LNK2001: "public: virtual int __thiscall
ACE_Task_Base::activate(long,int,int,long,int,class ACE_Task_Base
*,void * * const,void * * const,unsigned int * const,unsigned long *
const)" (?activate@ACE_Task_Base@@UAEHJHHJHPAV1@QAPAX1QAIQAK@Z) 외부 기호를
확인할 수 없습니다.
===========================================================================
샘플에 배포된 프로젝트들과 속성, define 내용들을 비교해 보았지만 차이를 발견하지 못했습니다.
혹시 유사한 경험을 해보신 분들 조언 부탁드립니다.
상위 두개는 유니코드 문제인데 마지막 남아 있는 문제는 뭔지 정확히 모르겠네요 ;;
*GDC 잘 관람하시길 바랍니다. ^^ 부럽!!
On 8월17일, 오후8시55분, YoungGi Lim <javawor...@gmail.com> wrote:
> 지금 외부에 나와있어서 바로 확인은 어렵고 돌아가는 대로 확인해 보겠습니다.
>
> * vc8, 9, 10중에 어떤 프로젝트 사용하시나요 ?
>
> * 프로젝트가 유니코드 인지
>
> * ACE_AS_STATIC_LIBS 선언하셨는지 체크해주시고,
>
> 근데 전반적으로 유니코드 관련 에러인것 같네요.
>
> 2010/8/17 이지현 <ljh6...@gmail.com>
사용하면서 뭔가 주의해야 될 것들이 뭐가 있을까요.
위에 영기님이 알려주신 내용들은 분명히 되어 있거든요. ~ 그 외에 원인이 될 만한 것들이 혹시 있는지 궁금합니다.
On 8월17일, 오후10시42분, 최흥배 <jackin...@gmail.com> wrote:
> 일단 디버그모드로만 VC++10에서 빌드 했는데 새 버전에 문제는 없었습니다.
> (참고로 전 svn을 통해서 받은 소스를 사용했습니다)
>
> 2010년 8월 17일 오후 9:26, 이지현 <ljh6...@gmail.com>님의 말:
halfnetworklib가 ACE 자체를 따로 가지고 있는데 vsi설정에서 기존의 ace 헤더와 lib 폴더를 설정해 두었기
때문에 발생한 문제였습니다.
ACE의 경우 클라이언트 소켓을 제작할 때 사용을 했었기에 툴에다가 설정을 해두었는데 그게 문제가 되었었네요. ^^a