虽然在之前指定了 static 参数,但是编译出来的结果仍然是动态链接的。这个是因为 Oprofile 在链接库时运用到了 libtool 工具。对于如何通过对 libtool 文件的修改使其直接产生静态链接的文件,目前未进行研究,而是直接手动编译成静态。
具体方法如下:
就 ophelp 命令来讲:
$:oprofile-0.9.4$ cd utils/
$:utils$ ls
Makefile Makefile.am Makefile.in opcontrol ophelp ophelp.c ophelp.o
$:utils$ rm ophelp
$:utils$ cd ..
$:oprofile-0.9.4
$ make
注:由于 ophelp 被删除,则它要重新生产,在 make 过程中可以查看相关生成指令。
arm-none-linux-gnueabi-gcc -W -Wall -fno-common -Wdeclaration-after-statement -o ophelp ophelp.o ../libop/libop.a ../libutil/libutil.a /work/pop t/popinstall/lib/ libpopt.so -liberty -ldl -Wl,--rpath -Wl,/work/popt/popinstall/lib -Wl,--rpath -Wl,/work/popt/popinstall/lib
$:oprofile-0.9.4$ cd utils/
$:utils$ rm ophelp
$:utils$ arm-none-linux-gnueabi-gcc -W -Wall -fno-common -Wdeclaration-after-statement -o ophelp ophelp.o ../libop/libop.a ../libutil/libutil.a /work/popt/popinstall/lib/ libpopt.a -liberty -ldl -Wl,--rpath -Wl,/work/popt/popinstall/lib -Wl,--rpath -Wl,/work/popt/popinstall/lib – static
$:utils$ file ophelp
ophelp: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked , for GNU/Linux 2.6.14, not stripped
则 ophelp 为静态链接,不依赖库,可以直接在开发板上运行。其他 Oprofile 指令相应通过手动编译生成。除其中 opcontrol 为 shell 脚本,是源码包自带的。