빌드 및 링크에러

565 views
Skip to first unread message

이지현

unread,
Aug 16, 2010, 10:11:14 PM8/16/10
to HalfNetwork
최근에 서버 프로젝트에 다시 halfnetworklib 붙이는 작업을 진행했습니다

코드는 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 내용들을 비교해 보았지만 차이를 발견하지 못했습니다.

혹시 유사한 경험을 해보신 분들 조언 부탁드립니다.


YoungGi Lim

unread,
Aug 17, 2010, 7:55:53 AM8/17/10
to halfn...@googlegroups.com
지금 외부에 나와있어서 바로 확인은 어렵고 돌아가는 대로 확인해 보겠습니다.

* vc8, 9, 10중에 어떤 프로젝트 사용하시나요 ?

* 프로젝트가 유니코드 인지

* ACE_AS_STATIC_LIBS 선언하셨는지 체크해주시고,

근데 전반적으로 유니코드 관련 에러인것 같네요.

2010/8/17 이지현 <ljh...@gmail.com>

이지현

unread,
Aug 17, 2010, 8:26:07 AM8/17/10
to HalfNetwork
9입니다.
모든 프로젝트가 유니코드로 설정되어 있습니다.
ACE_AS_STATIC_LIBS => 각 프로젝트에 모두 설정되어 있습니다.

상위 두개는 유니코드 문제인데 마지막 남아 있는 문제는 뭔지 정확히 모르겠네요 ;;

*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>

최흥배

unread,
Aug 17, 2010, 9:42:40 AM8/17/10
to halfn...@googlegroups.com
일단 디버그모드로만 VC++10에서 빌드 했는데 새 버전에 문제는 없었습니다.
(참고로 전 svn을 통해서 받은 소스를 사용했습니다)


2010년 8월 17일 오후 9:26, 이지현 <ljh...@gmail.com>님의 말:



--
MS MVP( VC++ )
Twitter : @jacking75
Blog : http://jacking.tistory.com/

이지현

unread,
Aug 17, 2010, 9:59:06 AM8/17/10
to HalfNetwork
halfnetworklib 자체 빌드는 잘 되는데 제가 프로젝트로 이식하면서 뭔가 빼먹은게 있는게 아닐까 생각됩니다.

사용하면서 뭔가 주의해야 될 것들이 뭐가 있을까요.

위에 영기님이 알려주신 내용들은 분명히 되어 있거든요. ~ 그 외에 원인이 될 만한 것들이 혹시 있는지 궁금합니다.


On 8월17일, 오후10시42분, 최흥배 <jackin...@gmail.com> wrote:
> 일단 디버그모드로만 VC++10에서 빌드 했는데 새 버전에 문제는 없었습니다.
> (참고로 전 svn을 통해서 받은 소스를 사용했습니다)
>

> 2010년 8월 17일 오후 9:26, 이지현 <ljh6...@gmail.com>님의 말:

이지현

unread,
Aug 17, 2010, 11:07:10 AM8/17/10
to HalfNetwork
원인을 찾았습니다.

halfnetworklib가 ACE 자체를 따로 가지고 있는데 vsi설정에서 기존의 ace 헤더와 lib 폴더를 설정해 두었기
때문에 발생한 문제였습니다.

ACE의 경우 클라이언트 소켓을 제작할 때 사용을 했었기에 툴에다가 설정을 해두었는데 그게 문제가 되었었네요. ^^a

YoungGi Lim

unread,
Aug 17, 2010, 12:16:32 PM8/17/10
to halfn...@googlegroups.com
다른 ACE 라이브러리를 참조해서 발생한 에러군요.

지금이라도 찾으셔서 다행입니다. :)


2010/8/17 이지현 <ljh...@gmail.com>
Reply all
Reply to author
Forward
0 new messages