2012-11-16 6 views
1

우분투 10.04에서 this script from oracle to get active NFS clients을 테스트하려고하는데이를 실행할 수 있습니다.dtrace : 스크립트를 컴파일하지 못했습니다. 전 처리기를 찾을 수 없습니다.

이를 달성하기 위해 먼저 these instructions 다음에 dtrace를 설치했습니다.

apt-get install bison flex zlib1g-dev libelf-dev binutils-dev libdw-dev libc6-dev-i386 
wget ftp://crisp.dyndns-server.com/pub/release/website/dtrace/dtrace-20121009.tar.bz2 
tar xfj dtrace-20121009.tar.bz2 
cd dtrace-20121009 
make all 
make install 
make load 

그러나, 내가 컴파일이 경고를 얻을 : 내가 libdw-devbinutils-dev을 설치 한

================================================================= 
=== You need /usr/lib/libdwarf.a and /usr/lib/libbfd.a installed to build. 
=== 
=== apt-get install binutils-dev 
=== apt-get install libdw-dev 
=== 
=== Without these, we will not build ctfconvert (needed for 
=== SDT structure definitions). 
================================================================= 
cd cmd/instr ; make --no-print-directory 
cd usdt/c ; make --no-print-directory 
tools/mkdriver.pl all 
Executing: /usr/src/dtrace/dtrace-20121009/tools/make-me 
make -C /lib/modules/2.6.38-16-server/build M=/usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver 
    CC [M] /usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver/systrace.o 
    LD [M] /usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver/dtracedrv.o 
    Building modules, stage 2. 
    MODPOST 1 modules 
    LD [M] /usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver/dtracedrv.ko 
tools/mkctf.sh 
build/ctfconvert not available - so not building the linux.ctf file 
NOTE: The build is complete, but build/ctfconvert is not available. 
     This means you will get run time errors from the io.d and sched.d files 
     due to undefined kernel structure definitions. Simply delete or rename 
     these files until a fix can be put in place to handle older 
     distros which do not have the required libdwarf dependencies. 

     (Typical error is references to undefined struct definitions such 
     as dtrace_cpu_t). 

sync 

을하지만, 메이크를 살펴 복용 보인다 이것은 내가 정확히 무슨 짓을했는지입니다 그것은 내 시스템에서 libdwarf.so을 찾고 libdwlibdw.so입니다.

이것을 회피하려면, ln -s /usr/lib/libdw.so /usr/lib/libdwarf.so으로 심볼릭 링크를 만듭니다. 그렇게하면 컴파일이 실패합니다.

cd cmd/ctfconvert ; make --no-print-directory 
gcc -g -I. -I../../ -I../../libctf -I../../common -I../../uts/common -I../../linux -I/usr/include/libdwarf -c dwarf.c 
In file included from dwarf.c:94: 
/usr/include/dwarf.h:56: error: expected identifier before numeric constant 
/usr/include/dwarf.h:136: error: expected identifier before numeric constant 
/usr/include/dwarf.h:321: error: expected identifier before numeric constant 
/usr/include/dwarf.h:461: error: expected identifier before numeric constant 
/usr/include/dwarf.h:517: error: expected identifier before numeric constant 
make[3]: *** [../../build/ctfconvert.obj/dwarf.o] Error 1 
make[2]: *** [all] Error 2 
make[1]: *** [do_cmds] Error 2 
tools/bug.sh 
make: *** [all] Error 1 

그럼, 취소하겠습니다. 나는 심볼릭 링크를 제거하고, 다시 컴파일하고, make installmake load을 실행하고 모든 것이 잘되기를 바란다. 그리고 모든 것이 괜찮은 것 같습니다.

는하지만, 그때는 위에서 언급 한 스크립트를 실행하려고, 그것은 실패

# ./get_ngs_clients.d 
dtrace: failed to compile script ./get_ngs_clients.d: Preprocessor not found 

내가 무슨 일이 일어나고 있는지에 대한 단서가 없다. 나는을 위해 gcc를 설치했다.

# dpkg -l | grep gcc 
ii gcc         4:4.4.3-1ubuntu1     The GNU C compiler 
ii gcc-4.4        4.4.3-4ubuntu5.1     The GNU C compiler 
ii gcc-4.4-base       4.4.3-4ubuntu5.1     The GNU Compiler Collection (base package) 
ii gcc-4.4-multilib      4.4.3-4ubuntu5.1     The GNU C compiler (multilib files) 
ii gcc-multilib       4:4.4.3-1ubuntu1     The GNU C compiler (multilib files) 
ii lib32gcc1        1:4.4.3-4ubuntu5.1    GCC support library (32 bit Version) 
ii libgcc1        1:4.4.3-4ubuntu5.1    GCC support library 
+0

혹시이 문제를 해결 했습니까? – AGS

+0

아니, 죄송합니다. 나는 dtrace가 해결하려고했던 문제를 다루기 위해 다른 접근법을 사용했다. –

+0

감사합니다. Jorge! 나는 계속 볼거야. – AGS

답변

0

/enable-dtrace = false를 /configure에 추가하려고 시도 했습니까? 아니면 --with-dtrace = false입니까? 당신이 당신의 시스템에서 libdwarf.a이없는 경우, ctfconvert 도구가 구축되지 않습니다 내가 생각하는 트릭을 할해야

...

1

. (libdwarf.a와 libdw.a는 같지 않습니다.)

ctfconvert가 빌드되지 않으면 사용자 자신 또는 dtrace etc/*. d 스크립트가로드되지 않을 수 있습니다. (Dtrace force는 이러한 스크립트를 자동으로로드하므로 성가신 일입니다.) 구조 정의에 의존하는 스크립트는 실패합니다.

월 2013 년, 나는이 libdwarf에 대한 현대적인 교체 될 것으로 보인다 이후 libdw.a으로 업데이트하는 데 걸리는보고에서 찾고 있습니다.

(DTrace/Linux의 '저자'가 게시)