2010년 8월 21일 토요일

tcpdump 컴파일 오류 - undefined reference to `pcap_parse'

앞서 소개한 포스팅에서 최신 버전의 tcpdump 로 확인하기 위하여 컴파일을 수행하다 발생한 에러에 대해 공유하고자 한다. 아마 개발 환경이 다 갖춰진 환경에서 컴파일이 되었다면 문제가 없었을 수도 있는 상황이었는데, 새로운 시스템에서 컴파일을 진행하다 보니 가벼운 문제가 있었다.

일단, libpcap 1.1.1 최신버전을 컴파일을 한후 다시 tcpdump 를 컴파일 하는 과정에서 아래와 같은 에러가 발생하였다.

./../libpcap-1.1.1/libpcap.a(gencode.o): In function `.L154':
gencode.c:(.text+0x7a4): undefined reference to `pcap_parse'
collect2: ld returned 1 exit status

pcap_parse 가 undefined 라고 나오는데, 오브젝트 파일에서 심볼을 확인해 보았더니 문제가 없었다. config.log 를 살펴보니

configure:9759: gcc -o conftest -DINET6 -g -O2   conftest.c ./../libpcap-1.1.1/libpcap.a   >&5
./../libpcap-1.1.1/libpcap.a(gencode.o): In function `.L154':
gencode.c:(.text+0x7a4): undefined reference to `pcap_parse'
collect2: ld returned 1 exit status
configure:9765: $? = 1
configure: failed program was:

확실히 에러를 확인할 수 있었다. 일단, pcap 라이브러리의 문제가 의심되어 모두 싹 지우고 새롭게 컴파일을 하고 tcpdump 컴파일을 다시 하니, 깔끔하게 된다. 아니, 특별히 건드린 부분도 없는데 말이다.

이전에 컴파일 상황은 bison, flex 같은것이 설치되어 있지 않아, configure 를 해 보고 없는 것이나 make 에서 없는 것을 그때그때마다 설치해 진행한 상황이었다. 그래서 이 부분이 꼬였었나 보다.

문제를 해결하고 보니 참 허무하다. 다시 쏵 지우고 컴파일을 한 것 밖에 없는데 말이다. 처음에는 이것저것 다 뒤져보느라 약간 시간을 허비했는데, 역시나 처음으로 부터 다시 돌아가 시작하는 것이 정답이었던 것인가 -.-

이런 에러를 똑같이 경험하실 분들을 위해 기록을 남겨놓으니 참고하길 바란다. 컴파일 전에 다음과 같은 부분이 설치 되어 있는지 먼저 확인하고 진행하면 큰 무리 없을 것이다.

flex
bison

우분투/데비안 계열 사용자라면 다음과 같은 형태면 문제 없을 것이다.

# apt-get install build-essential flex bison
그럼, 같은 에러를 겪은 분들에게 도움이 되기를 바라며.

P.S 구글링 해보면 비슷한 에러메시지가 나오기에 도움이 되지 않을까 생각한다.

댓글 1개:

  1. trackback from: 배포판에 설치된 GCC 버전정보
    Linux/Unix 프로그래밍을 하다보면 GCC 버전에 영향을 받는 경우가 있다. 예를 들면 ACE 라이브러리를 컴파일 할 경우, gcc-4.x 대의 버전에는 컴파일 오류가 발생한다. 그래서 부득이 gcc/g++ 을 다시 설치하려고 해도 여의치 않는 경우가 많다. 이럴 경우 다른 배포판을 찾아보게 되는데, 여기에 배포판마다 가지고 있는 gcc의 버전 정보를 싣는다. Distribution Version Compiler version Provided..

    답글삭제