歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix基礎知識 >> FreeBSD 下使用crunch集成編譯程序

FreeBSD 下使用crunch集成編譯程序

日期:2017/2/28 10:24:11   编辑:Unix基礎知識
FreeBSD 鼓搗linux的朋友都知道,linux下有一個叫busybox的項目,它把大多數unix的基本命令都集成編譯成一個單獨的程序。 FREEBSD也有一種機制,叫做crunch.它允許我們不用加載標准庫也可以利用其它程序中的相同函數。crunch使用一個平板的文本文件來定制集成的程序、編譯選項以及需要的LIBS。下面是我在freebsd4.9RELEASE上,集成編譯 /bin和/sbin下常用程序的一個配置文件,這些文件如果靜態編譯,大約占用16M左右的空間.

# cat tinyware.conf
#crunch配置文件最常見的指令有buildopts(編譯選項)、srcdirs(指定代碼路徑)
#progs(指定要集成的程序)、ln(創建指向一個程序的連接)、libs(指定需要的庫)
#其他指令和crunch的細節請參看 man crunchgen和crunchide

#指定編譯時不包含ipsec、ipv6、和crypt


buildopts -DRELEASE_CRUNCH -DNOIPSEC -DNOINET6 -DNOCRYPT

#指定程序需要的代碼路徑

srcdirs /usr/src/bin
srcdirs /usr/src/sbin
srcdirs /usr/src/secure/lib


#/bin下的常見程序

progs cat chio chmod cp csh date dd df domainname echo
progs expr hostname kill ln ls mkdir mv ps pwd rm sh rmdir
progs sleep stty sync test ed


#創建一個指向test的連接

ln test [

#/sbin下的常見程序

progs adjkerntz dmesg disklabel fsck ifconfig init
progs ipf ipfs ipfstat ipfw ipmon ipnat natd
progs kldconfig kldload kldstat kldunload ldconfig md5 mknod
progs mount mount_null mount_union newfs mount_std umount
ln mount_std mount_procfs
ln newfs mount_mfs
progs ping reboot restore route routed shutdown sysctl


#指定這些程序需要的庫,想知道這些程序都需要什麼庫,你可以使用這樣的命令:

# grep -ir LDADD /usr/src/bin/*

# 這樣就能抽取出包含在Makefile中的指定庫的行

libs -ltermcap -lcrypt -lutil -lm -lcipher -lkvm -ll -ledit
libs -lcrypto -lipx -lncurses -lmd -lalias -lipsec


寫完配置文件後,就可以使用crunchgen來生成Makefile和代碼了。


# crunchgen -m Makefile tinyware.conf

然後你可以這樣編譯它:

# make -f Makefile

如果沒什麼錯誤,應該就可以生成tinyware的可執行程序,如果出錯,請重新檢查是
否沒寫全libs和srcdirs
Copyright © Linux教程網 All Rights Reserved