Gcc dtrace:未能编译未找到的脚本预处理器

Gcc dtrace:未能编译未找到的脚本预处理器,gcc,ubuntu,dtrace,dwarf,Gcc,Ubuntu,Dtrace,Dwarf,我试图在Ubuntu 10.04上进行测试,但我无法让它运行 为了实现这一点,我首先安装了dtrace-following。这正是我所做的: 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 xf

我试图在Ubuntu 10.04上进行测试,但我无法让它运行

为了实现这一点,我首先安装了dtrace-following。这正是我所做的:

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
,但看看makefile,它似乎在查找
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
那么,让我们撤销它。我删除符号链接,重新编译,运行
makeinstall
makeload
,希望一切正常。一切似乎都很好

但是,我尝试运行上面提到的脚本,但失败了:

# ./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
您是否尝试将--enable dtrace=false添加到/.configure? 或者可能——dtrace=false

我想这应该可以解决问题了……

您是否尝试将--enable dtrace=false添加到/.configure中? 或者可能——dtrace=false


我认为,这应该可以做到…

如果您的系统上没有libdwarf.a,那么ctfconvert工具将无法构建。(libdwarf.a和libdw.a不一样)

如果ctfconvert未生成,则可能无法加载您自己的任何脚本或dtrace etc/*.d脚本。(Dtrace force会自动为您加载这些脚本,这很烦人)。任何依赖结构定义的脚本都将失败

截至2013年5月,我正在研究更新libdw.a需要什么,因为这似乎是libdwarf的现代替代品


(由DTrace/Linux的“作者”发布)。

如果您的系统上没有libdwarf.a,则不会生成ctfconvert工具。(libdwarf.a和libdw.a不一样)

如果ctfconvert未生成,则可能无法加载您自己的任何脚本或dtrace etc/*.d脚本。(Dtrace force会自动为您加载这些脚本,这很烦人)。任何依赖结构定义的脚本都将失败

截至2013年5月,我正在研究更新libdw.a需要什么,因为这似乎是libdwarf的现代替代品


(由DTrace/Linux的“作者”发布)。

你解决过这个问题吗?没有,对不起。我最终使用了其他方法来处理dtrace想要解决的问题。谢谢Jorge!我会继续找的。你解决过这个问题吗?没有,对不起。我最终使用了其他方法来处理dtrace想要解决的问题。谢谢Jorge!我会继续找的。