5.5버전 설치후 에러

39 views
Skip to first unread message

lsh

unread,
May 16, 2006, 11:01:38 PM5/16/06
to kaug
window XP, msvc 6.0

5.5버전을 실행하여 ACE.lib와 ACE.dll을 문제 없이
빌드했습니다.

그런데 간단한 예제를 하나 실행시키면 밑에 와 같은
에러 메세지가 뜨고 종료합니다.

ACE안에 포함된 예제를 돌려봐도 이런 에러가
뜨는데요 원인이 무었인가요? 알려주세요

프로시저 시작 지점
?ace_os_main_i@@YAHAAVACE_Main_Base@@HQAPAD@Z을 DLL ACE.dll에서
찾을수없습니다.

redpixel

unread,
May 17, 2006, 12:05:43 AM5/17/06
to kaug...@googlegroups.com
ACE_HAS_NONSTATIC_OBJECT_MANAGER 매크로의 문제일수 있습니다. 보통 ACE는 ACE_MAIN() 이라는 매크로로 ACE::init() ~ ACE::fini() 함수실행을 캡슐화하는데 대부분의 예제들이 이 방법을 사용합니다.

만약 config.h에 이 매크로가 선언되어있다면 일반 main() 함수로 소스를 고쳐주시고 main() 안에서 ACE::init()와 ACE::fini()를 시작과 끝에 각각 추가해주셔야합니다. 복잡해보이더라도 ACE가 자체적으로 DLL이라든가 동적할당된 자원들, 싱글톤들을 일괄 관리하기 위한 것이니 신경을 써주셔야합니다.

MFC와 같이 쓴다던가 할때에는 반드시 이렇게 해주셔야합니다. ace/config.h 의 내용을 올려주세요. 보고 다시 답장 달아드릴께요.

06. 5. 17일에 lsh <under...@hotmail.com >이(가) 작성:



--
Kwon Tai-in
http://www.redwiki.net
PGPkey: https://keyserver2.pgp.com/vkd/DownloadKey.event?keyid=0xAFA5E4510E5B4EF9
MSN,GTalk ID : redwi...@gmail.com

lsh

unread,
May 17, 2006, 2:48:04 AM5/17/06
to kaug
/************ config.h **************/
#define ACE_HAS_STANDARD_CPP_LIBRARY 1 // STL 사용
#include "ace/config-win32.h"

redpixel

unread,
May 17, 2006, 3:06:25 AM5/17/06
to kaug...@googlegroups.com
예제는 tests/ 에 있는것을 빌드하셨나요? 아님 examples/ ?

2006/5/17, lsh <under...@hotmail.com>:

/************ config.h **************/
#define ACE_HAS_STANDARD_CPP_LIBRARY 1 // STL 사용
#include "ace/config-win32.h"





lsh

unread,
May 17, 2006, 4:47:53 AM5/17/06
to kaug
tests/, examples/ 둘다 해봤는데 같은 에러가 납니다.

제가 무슨 기본적인 실수를 한거 같은데요.

5.3버전 빌드 하는것 처럼 똑같이 해줬습니다.

redpixel

unread,
May 18, 2006, 8:07:32 PM5/18/06
to kaug...@googlegroups.com
vc 2005 pro로 빌드해보았습니다만 잘되는 것을 확인했습니다. 혹시 vc6으로 빌드하셨나요? vc6을 사용하실때에는 stlport 또는 서비스팩 업그레이드를 하셔서 STL의 표준을 맞춰주시는게 좋습니다.

개인적으로 다른 라이브러리와의 충돌때문에 ace/config.h에

#define ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER 1

을 선언해서 쓰는 편입니다. 이렇게하면 모든 test와 example의 소스안에서 main() 함수안에 ACE::init()와 ACE::fini()를 직접 해주어야합니다. (번거롭긴하지만 가장 깔끔한 방법같아요) 아래와 같이 넣어주면 됩니다.

int main(int argc, char **argv) {
  ACE::init();
......
  ACE::fini();
  return 0;
}

lsh

unread,
May 19, 2006, 12:20:12 PM5/19/06
to kaug
vc 2005 깔아서 ACE 5.5 다시 빌드했습니다.
에러없이 성공하였습니다.
그런데 여전히 책에서 처럼 출력이 나오지 않고 그냥
출력됩니다. 제가 한번 다시 해보겠습니다. ^^

마지막 질문입니다.
..\ACE-5.5\ACE_wrappers\tests\ 를 빌드했는데 "ACE_HTBPd.lib"
이거 못찾는닫고 나오는데요.
이유를 알고싶습니다.

redpixel

unread,
May 19, 2006, 9:07:58 PM5/19/06
to kaug...@googlegroups.com
흐음.. 이상하군요. 버그가 아닐까 생각이 듭니다.

ACE_HTBPd.lib은 배포본의 protocols 폴더에보시면 HTBP에 대한 lib 소스가 있습니다. 그걸 빌드하시면 됩니다. 루트에서 빌드하지 않아서 그런것 같네요.

2006/5/20, lsh < under...@hotmail.com>:

lsh

unread,
May 20, 2006, 12:45:39 PM5/20/06
to kaug
질문하나 더 하겠습니다. 며칠째 빌드와의
싸움이네요.

저는 visual stdio 2005 pro를 사용하는데요
C:\Program Files\ACE-5.5\ACE_wrappers\ace 밑에 보면 ace.dsw,
ace.sln, ace_vc8.sln 세개가 헤깔립니다.
1. ace.dsw를 그냥 실행하나요?
2. ace.sln(버전:visual stdio 2005라고 써있습니다.) 과
ace_vc8.sln의 차이점이 뭔가요?

3. 노트북에 같은 걸 깔았는데도 C:\Program
Files\ACE-5.5\ACE_wrappers\ace 밑에는
ace.sln(버전:visual stdio 2005라고 써있습니다.)는 없고
ace_vc8.sln만 있는 이유가 있나요?

redpixel

unread,
May 21, 2006, 1:27:05 AM5/21/06
to kaug...@googlegroups.com
ace.sln은 없을겁니다. 아마도 ace.dsw가 vc6때의 프로젝트화일이라 변환이 일어난것으로 보입니다. (2005에서 읽어들일수 있거든요) ace_vc8.sln은 multithread, debug multithread 쪽 빌드만 제공하는 프로젝트 화일입니다. 예제를 실행하고싶으시다면 일단 ace_vc8.sln기준으로 빌드를 하시는게 편하고요. (대신 실행화일에 ace.dll이 따라다녀야합니다) 정적링크를 원하신다면 ace.dsw를 변환한 프로젝트로 그대로 빌드하시면 됩니다.

저도 처음에는 빌드때문에 고생을 많이 했습니다. 오픈소스 소프트웨어의 공통점인거 같아요. :( 좀 지나시면 소스분석에 또 시간을 꽤 보내실겁니다. 책과 doxygen 도움말로는 성이 안차는 부분이 생기거든요. :)

화이팅입니다~

2006/5/21, lsh < under...@hotmail.com>:

lsh

unread,
May 21, 2006, 1:41:02 AM5/21/06
to kaug
답변 정말 감사합니다. 진짜 아직 일은 시작도
못했는데 진입점에서 계속 어렵네요 ^^;
이제 본격적으로 소스 분석을 해봐야겠습니다.
앞으로도 많은 조언 부탁드립니다. 감사합니다.
Reply all
Reply to author
Forward
0 new messages