블로그 이미지
하늘, 그리고 구름을 너무 좋아하는, 그런 사람의 블로그 입니다.
하늘상자

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
  • 37,770total
  • 3today
  • 9yesterday
2012/11/20 13:02 프로그래밍/프로젝트

이전 포스팅에서 WebRTC의 개략적인 아키텍쳐를 살펴 보았습니다.

그리고 WEbRTC의 클라이언트가 서버와 접속할 때 사용하는 모듈은 구글의 libjingle를 재사용 함을 알 수 있었습니다.

그래서 현재 나와있는 XMPP 서버 중 openfire와의 연결 부분을 확인 해 보기 위해 libjingle을 빌드 해 보기로 하였습니다.

근데 이런 결심이 엄청난 고통과 고뇌를 불러 올 줄이야.....

뭐 결국 1주일정도 걸려서 빌드에 성공 하였고 이렇게 빌드 성공기를 남겨 두고자 합니다.

자세한 빌드 과정 보다는 중간에 발생되는

우선 저의 빌드 환경은 다음과 같습니다.

  • VMWare Workstation - Ver. 9.0.1
  • Ubuntu - Ver. 12.04.1
  • GCC - Ver. 4.6.3
  • Python - Ver. 2.7.3
  • libjingle - Ver 0.6.14


밑에서도 다시 살펴 보겠지만, 나머지는 빌드에 큰 영향을 끼치지 않는데 파이썬만은 꼭 2.0.0이상 3.0.0 이하의 버전을 사용하셔야 합니다.

그리고 제가 왜!!! libjingle의 버전을 강조 했는지도 밑에가서 설명 드리겠습니다. 이것 때문에 대체 몇일을 삽질 한건지 ㅜㅜ

각설하고, 무엇보다도 빌드를 위해서 소스를 다운받아야 하겠죠? 아래의 링크에서 0.6.14 버전의 소스를 다운 받습니다.

http://code.google.com/p/libjingle/downloads/list


소스의 압축을 풀어보면 README파일에 빌드과정이 자세히 나와 있는데요, 우선 이 부분을 보시죠.

2.2 libjingle


Libjingle needs to be downloaded and patched


  * First, install Libjingle.  Since this README lives within Libjingle,this step is normally already done.

    Libjingle home page is here http://code.google.com/p/libjingle/

    For example, on Windows, download http://libjingle.googlecode.com/files/libjingle-0.5.2.zip

    unzip to C:\src\

분명 저희는 0.6.14버전을 다운 받았는데... 안내사항에는 0.5.2 버전을 준비하라고 나와 있습니다. 결론적으로 0.5.2는 빌드가 되지 않습니다. openssl 라이브러리 링크 에러를 도저히 해결 할 수가 없더라고요. 그래서 저는 최신 버전의 소스로 빌드를 진행 하였습니다.

저와 같은 빌드 환경이고, README에 나와있는 준비사항을 꼼꼼히 확인하셨다면 빌드가 진행은 될 겁니다. 바로 에러가 출몰해서 그렇지...;;                       

저는 4번의 빌드에러가 발생했고 각 에러에 대해 다음과 같이 조치하여 빌드를 성공 시켰습니다. 각 에러별 조치방법은 다음과 같습니다.


*에러로그#1

third_party/srtp/srtp/ekt.c: In function ‘srtp_stream_init_from_ekt’:

third_party/srtp/srtp/ekt.c:169:12: error: variable ‘master_key_len’ set but not used [-Werror=unused-but-set-variable]

cc1: all warnings being treated as errors

scons: *** [build/dbg/obj/third_party/srtp/srtp/ekt.o] Error 1

scons: building terminated because of errors.

*에러로그#2

base/ipaddress.cc: In function ‘talk_base::IPAddress talk_base::TruncateIP(const talk_base::IPAddress&, int)’:

base/ipaddress.cc:328:14: error: variable ‘ip_addr’ set but not used [-Werror=unused-but-set-variable]

cc1plus: all warnings being treated as errors

scons: *** [build/dbg/obj/base/ipaddress.o] Error 1

scons: building terminated because of errors.

*수정사항#1, #2

1번과 동일한 에로로 ip_addr 변수를 삭제 합니다.

 flslg 님이 남겨주신 방법을 사용하는 것이 정확한 방법 같아 본문내용 수정 하였습니다.

에러로그#1, #2의 경우 아래와 같이 컴파일러의 옵션을 변경하면 소스코드 수정 없이 컴파일이 가능 합니다.

-> main.scons 파일의 다음 부분에 -Wno-error=unused-but-set-variable를 추가

#-------------------------------------------------------------------------------

# L I N U X

#

linux_common_env = posix_env.Clone(

  tools = [

    'target_platform_linux',

    'talk_linux',

  ],

)


linux_common_env.Append(

  CPPDEFINES = [

    'LINUX',

  ],

  CCFLAGS = [

    # Needed for link-time dead-code removal to work properly.

    '-ffunction-sections',

    '-fdata-sections',

    '-Wno-error=unused-but-set-variable',

  ],


*에러로그#3

build/dbg/lib/libvideorenderer.a(gtkvideorenderer.o): In function `GtkVideoRenderer':

/home/azureskybox/src/libjingle/talk/session/phone/gtkvideorenderer.cc:53: undefined reference to `g_thread_init'

collect2: ld returned 1 exit status

scons: *** [build/dbg/obj/call] Error 1

scons: building terminated because of errors.

*에러로그#4

________Compiling build/dbg/obj/session/phone/mediasession_unittest.o

session/phone/mediasession_unittest.cc: In member function ‘virtual void MediaSessionDescriptionFactoryTest_TestCreateAudioOffer_Test::TestBody()’:

session/phone/mediasession_unittest.cc:189:3: error: converting ‘false’ to pointer type for argument 1 of ‘char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)’ [-Werror=conversion-null]

session/phone/mediasession_unittest.cc: In member function ‘virtual void MediaSessionDescriptionFactoryTest_TestCreateVideoOffer_Test::TestBody()’:

*수정사항#3, #4

각 에러 로그에 대해 다음의 다음의 svn patch를 적용 합니다.

에러로그#3 링크

에러로그#4 링크


단, 다운받은 주소는 svn에서 checkout받은 소스가 아니라서 자동으로는 되지 않고 변경사항을 보시고 소스를 직접 변경하셔야 합니다.


아마 위와같이 각 에러에 대해 수정을 하시면 성공적으로 빌드가 되실 겁니다.

이제부터 라이브러리와 동시에 빌드 된 예제를 분석해야 하는데... 산 넘어 산이네요 ㅎㅎ

잘못된 점, 궁금하신 점은 덧글로 남겨 주세요~

즐개발~~


*참고 사이트


posted by 하늘상자
 <PREV 1 ... 7 8 9 10 11 12 13 14 15 ... 70    NEXT>

티스토리 툴바