dtrace: не удалось скомпилировать скрипт. Препроцессор не найден.

Я пытаюсь протестировать этот скрипт от oracle для получения активных клиентов NFS в Ubuntu 10.04. , но я не могу заставить его работать.

Для этого я сначала установил 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

Тем не менее, я получаю это предупреждение при компиляции:

=================================================================
=== 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

Я установил libdw-dev и binutils-dev, но, взглянув на make-файл, кажется, что он ищет libdwarf.so, а libdw в моей системе называется libdw.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 install и make 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

person Jorge Suárez de Lis    schedule 16.11.2012    source источник
comment
Вы когда-нибудь решали это?   -  person AGS    schedule 27.02.2013
comment
Прошу прощения, но нет. В итоге я использовал другие подходы для решения проблемы, которую должен был решить dtrace.   -  person Jorge Suárez de Lis    schedule 27.02.2013
comment
Спасибо Хорхе! Я буду искать.   -  person AGS    schedule 27.02.2013


Ответы (2)


Если в вашей системе нет libdwarf.a, инструмент ctfconvert не будет собран. (libdwarf.a и libdw.a — это не одно и то же).

Если ctfconvert не собирается, то любой из ваших скриптов или скрипты dtrace etc/*.d могут не загрузиться. (Dtrace force загружает эти сценарии автоматически, что раздражает). Любой сценарий, который полагается на определения структуры, затем завершится ошибкой.

По состоянию на май 2013 года я смотрю, что нужно для обновления до libdw.a, поскольку это, похоже, современная замена libdwarf.

(опубликовано «автором» DTrace/Linux).

person Paul Fox    schedule 05.05.2013

Вы пытались добавить --enable-dtrace=false в /.configure? Или, может быть, --with-dtrace=false?

Это должно сработать, я думаю...

person Community    schedule 19.04.2013