FreeBSD 下使用crunch整合編譯程式(轉)

BSDLite發表於2007-08-12
FreeBSD 下使用crunch整合編譯程式(轉)[@more@]PKkingson < >

鼓搗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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-950334/,如需轉載,請註明出處,否則將追究法律責任。

相關文章