2010-11-27 2 views
0

우분투 10.10에서 libwireshark에 대한 프로그램을 컴파일하려고합니다. 패키지를 설치했으며이 패키지는 /usr/lib/wireshark/usr/include/wireshark에 파일을 설치했습니다.libwireshark에 대한 컴파일

내 C 소스 코드 파일의 헤드는 #include <epan/epan.h> 지시어를 포함하고 다음과 같이 내 gcc 명령 줄 인수는 다음과 같습니다 그러나

$ gcc -I/usr/include/wireshark `pkg-config --libs --cflags glib-2.0` -Wall -o test.out test.c -L/usr/lib/wireshark -lwireshark 

이는 등 많은 오류 반환 :

/usr/lib/gcc/i686-linux-gnu/4.4.5/include/varargs.h:4: error: #error "GCC no longer implements <varargs.h>." 
/usr/include/wireshark/epan/ftypes/ftypes.h:258: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘union’ 

무엇 이 문제를 바로 잡아야합니까?

답변

2

사용자 친화적이지 않은 패키지 및 코드 구성의 간단한 경우 인 것처럼 보입니다. Wireshark의 "config"헤더를 먼저 포함시켜야합니다. 나는이 방법으로 이것을 쓸 것입니다.

#include <wireshark/config.h> /* needed by epan */ 
#include <epan/epan.h> 

이 라이브러리의 헤더를 포함 할 때마다 먼저이 작업을 수행하십시오.

내가 어떻게 알았습니까? 나는 epan/proto.h을 파고, HAVE_STDARG이 설정되어 있지 않은 경우에만 조건부로 varargs.h을 포함한다는 것을 발견했습니다. 그때 나는 grep/usr/include/wireshark/의 d가 있고,이 변수가 config.h에 설정되어 있음을 알았 기 때문에 이것을 포함시킬 필요가 있다고 생각했습니다.

또한 libwireshark과의 연결을 위해 -lwiretap을 추가해야했습니다.

wireshark-dev의 조직의 다른 NIT는 후자 실제 libwireshark.so 어떤 이전에 심볼릭 링크를 제공 않더라도 wireshark-common에 (패키지 레벨) 의존하지 않는다는 것이다. 따라서 wireshark-common이 설치되어 있는지 또는 /usr/lib/libwireshark.so과 해당 참조가 있는지 확인해야합니다.

+0

당신, 선생님, 챔피언입니다! 고맙습니다. 모든 올바른 파일은 (이전 시도에서와 같이) 자리에있는 것처럼 보일 수 있지만 사후성을 위해 그대로 두는 것이 좋습니다. –