OpenWrt的strip功能定义在rules.mk中,使用了两个变量STRIP和RSTRIP(run strip),然后调用scripts/rstrip.sh脚本来真正的执行strip!
rules.mk中的相关定义如下:
198 # strip an entire directory 199 ifneq ($(CONFIG_NO_STRIP),) 200 RSTRIP:=: 201 STRIP:=: 202 else 203 ifneq ($(CONFIG_USE_STRIP),) 204 STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS)) 205 else 206 ifneq ($(CONFIG_USE_SSTRIP),) 207 STRIP:=$(STAGING_DIR_HOST)/bin/sstrip 208 endif 209 endif 210 RSTRIP:= \ 211 NM="$(TARGET_CROSS)nm" \ 212 STRIP="$(STRIP)" \ 213 STRIP_KMOD="$(TARGET_CROSS)strip --strip-unneeded --remove-section=.comment --remove-section=.pdr --remove-section=.mdebug.abi32" \ 214 $(SCRIPT_DIR)/rstrip.sh 215 endif
而自己编写的packages使用strip,实际上是packages包含package.mk ==》包含package-ipk.mk ==》调用RSTRIP变量所代表的命令 !
RSTRIP在include/package-ipk.mk中的调用:
117 $(call Package/$(1)/install,$$(IDIR_$(1))) 118 mkdir -p $(PACKAGE_DIR) 119 -find $$(IDIR_$(1)) -name 'CVS' -o -name '.svn' -o -name '.#*' | $(XARGS) rm -rf 120 $(RSTRIP) $$(IDIR_$(1))
因此,如果不想让openwrt进行strip,
最彻底的方法就是在你的Makefile中添加下面一行,包括kmod也不strip了:
RSTRIP:=:
一般情况下使用
STRIP:=: //或者 STRIP:=true
同样,你也可以在Makefile中自行设置CONFIG_STRIP_ARGS,CONFIG_NO_STRIP,CONFIG_USE_STRIP等参数,
当然这些你也可以通过make menuconfig来设置。
make package/foo/{clean,compile} V=99 STRIP=/bin/true
也就是说如果默认使用strip破坏了你的程序、库,可以使用STRIP=/bin/true来取消strip操作,直接在Makefile中定义也是可以的
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。