[위키 백업] log4cxx 컴파일 삽질

Visual Studio 2010

프로젝트 설정하기

  • apr, apr-util과 log4cxx를 준비한다. 컴파일 할 때 apr-1.4.2-win32-src, apr-util-1.3.10-win32-src, apache-log4cxx-0.10.0을 사용하였다.
  • 세 파일을 모두 압축을 풀되 apr, apr-util의 디렉토리 이름은 그냥 apr, apr-util로 버전 명을 제거한다.
  • apache-log4cxx-0.10.0 디렉토리로 가서 configure.bat 파일을 한 번 클릭해 실행한다.
  • 공식 홈페이지 문서를 보면 configure-aprutil.bat 도 실행하라고 되어 있는데 이 안을 보면 sed를 실행하는 스크립트에 불과하다. sed-4.2.1-setup.exe를 설치해 실행하면 에러 메시지만 생긴다. 일단 나중에 손으로 고쳐 주자.
  • 비주얼 스튜디오를 열어 apache-log4cxx-0.10.0/projects 안의 log4cxx.dsw를 읽어들인다.
  • 다음 log4cxx를 스타트업 프로젝트로 설정한다.

컴파일 준비

  • 이전 단계에서 수정하지 못한 sed 스크립트를 손으로 고친다.
    • apr-utilincludeapu.hw 파일에서 #define APU_HAVE_APR_ICONV 부분을 #define APU_HAVE_APR_ICONV 0로 수정.
    • apr-utilincludeapr_ldap.hw 파일에서 #define APR_HAS_LDAP 부분을 #define APR_HAS_LDAP 0로 수정.
  • 다음 수많은 컴파일 에러와 싸워야 함.
    • LOG4CXX_LIST_DEF 매크로가 말썽인데 이것을 클래스 밖(네임스페이스를 넘지는 말고)으로 빼낸다.
    • telnetappender.h 파일 안에서는 바로 윗줄의 typedef log4cxx::helpers::SocketPtr Connection; 구문까지 밖으로 빼낸다.
    • LoggingEvent::KeySet 과 같이 스코프가 바뀌어서 에러가 나는 부분은 그냥 KeySet으로 변경한다.
    • insert_iterator가 없다고 에러가 나는 경우는 #include <iterator>를 선언한다.
    • 위의 사항을 모두 수정하면 컴파일 에러는 다 수정하게 된다.
  • apr, apr-util의 lib 파일이 참조되지 않아 링크 에러가 나는 문제가 남는다.
    • log4cxx 프로젝트의 설정의 ‘additional dependencies’에 아래 세 줄을 추가한다.
....apr-utillibdaprutil-1.lib
....apr-utilxmlexpatliblibdxml.lib
....aprlibdapr-1.lib
 
Release 빌드의 경우 libd에서 libr로 변경하면 된다.

기타

  • VS2008에서 컴파일했을 때 LOG4CXX_XXXX 매크로 안에서 “<<” 연산자를 이용하면 access violation이 일어나는 문제가 있었다. VS2010을 이용해 컴파일한 것에서는 문제가 발생하지 않았다. 컴파일러의 버전이 달라서 발생하는 문제였나? 잘 모르겠다.

참고

이 글이 다른 이들게 도움이 되었는지 모르겠다. 귀찮으신 분들(나를 포함한)을 위해 바이너리를 올려두도록 하겠다.

    댓글 1개

    댓글이 닫혔습니다.