2011-07-28 7 views
1

두 개의 독립적 인 소스 트리 각각에서 #include 헤더 파일이있는 C 소스 파일을 컴파일하려면 어떻게해야합니까? 각 소스 트리에는 자체 메이크 파일 세트가 있으며 소스 트리는 서로 완전히 독립적입니다.여러 소스 코드 트리에 종속 된 소스 파일 컴파일

특정 네트워크 프로토콜의 패킷을 해석하는 Wireshark 플러그인을 작성하고 있습니다. 플러그인을 컴파일하기 위해 컴파일러는 Wireshark 소스 트리에 대해 심볼을 해석해야합니다. 그러나 플러그인이 Wireshark에서 바이트 배열을 제공 할 때 실제로 네트워크 패킷 내용을 해석하기 위해서는 플러그인이 완전히 별도의 소스 트리에서 데이터 구조 및 RPC XDR 루틴의 정의를 포함해야합니다. 따라서 컴파일러는 Wireshark와이 파일들을 포함하는 완전히 별개의 소스 트리에 대한 심볼을 해석해야합니다.

쉬운 방법이 있나요? 어떤 제안이라도 대단히 감사 할 것입니다.

답변

2

컴파일과 링크를 혼동하지 않도록하십시오. 당신이 말하는 것은 아니지만 단지 두 가지 단계가 있음을 지적하십시오.

tree1과 tree2에 대해 컴파일하려면 gcc에 -I include 지시문을 사용하십시오. gcc -c -I/some/include/for/tree1 -I/some/include/for/tree2 input.c -o output.o

두 개의 트리를 연결하려면 .so 또는 .la 파일 (정적 또는 동적 라이브러리)를 가져올 수 있습니다. tree1.la tree2.la라고 부르세요. 에/경로 넣어 /에/트리 1/libs와 및/경로 /로/tree2/libs가

다음 링크

의 gcc -o 음식물 -ltree1 -ltree2 -L/경로 /로/트리 1/libs와 -L/path/to/tree2/libs

트리가 충분히 큰 경우 개체 코드의 정적 또는 동적 라이브러리를 만들어야합니다. 그런 다음 컴파일 할 헤더를 가리키고 libs에 링크를 지정합니다.

+0

감사합니다. 충분한 평판 포인트가 있다면 +1 할거야 ... –

0

당신이 컴파일에 필요한 헤더 파일을 포함하는/g ++

사용 -I 플래그 GCC를 사용하는 경우.

예 :

g++ -I<includepath1> -I<includepath2> ... -c somefile.cpp -o somefile.o 

사용 -L 플래그는 라이브러리에 링크합니다. 예 : 접근 방식은 유사한 단지 명칭이 다른 것입니다 창에서

g++ -o pluginname.so somefile.o somefile2.o somefile3.o -L <libpath1> -l<libname1> -L <libpath2> -l <libname2> <fullpath to .a file for statically linking> 

대신 대신이 .a 파일의 .so를하고 lib 디렉토리 파일의 .dll 파일.

+0

감사합니다. 충분한 평판 포인트가 있다면이 대답도 +1합니다. –