移植无非就三个步骤
1、./configure
2、make
3、make install
正常情况下在步骤1可以指定编译器,CC=xxxx之类,或者直接指定host名称,一般--host=xxxxx指定后,对应的编译器就不用指定了,会默认xxxx-gcc,裁剪也会默认用xxxx-strip,但是!!!ppp不支持选项‘--host=’选项,只支持‘--prefix=’,所以步骤1无法指定编译器,需要在步骤2中添加,即 make CC=xxxx,正常的话这样也没问题,但是!!! ppp-2.4.5的工程生成的Makefile,里面install时使用-s命令,默认使用的是PC下的strip命令。不是步骤2指定的xxx-strip,所以必须要去更改Makefile文件,把-s(裁剪)去掉,最后再手动对生成的可执行文件strip(裁剪)。例如直接把Makefile中的$(INSTALL) -s -c chat $(BINDIR)语句中的-s去掉,这样make install的时候就不会报错了。报错如下图↓ ↓ ↓。
问题来了,我们用的是开源的代码,每次用./configure时,各个目录中的Makefile又会重新生成,所以每次又得改,觉得很麻烦。有什么办法使install -s不是调用默认的strip 而是调用交叉编译的strip,改configure文件?目前没有发现直接改configure的办法,但是可以用脚本实现交叉编译。用sed修改需要去掉-s的Makefile
# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/' ab.txt
#源码目录
PPP_SRC_DIR := /src/ppp/
#输出目录
PPP_TARGET_DIR := /for_arm/ppp
TARGET_CC=arm-hisiv300-linux-gcc
TARGET_STRIP=arm-hisiv300-linux-strip
#目标名称
PPP_TARGET_NAME := pppd
mkdir -p $(PPP_TARGET_DIR)
cd $(PPP_SRC_DIR); ./configure --prefix=$(PPP_TARGET_DIR)
make -j8 CC=$(TARGET_CC) -C $(PPP_SRC_DIR)
sed -i 's/-s//' $(PPP_SRC_DIR)chat/Makefile
sed -i 's/-s//' $(PPP_SRC_DIR)pppd/Makefile
sed -i 's/-s//' $(PPP_SRC_DIR)pppd/plugins/radius/Makefile
sed -i 's/-s//' $(PPP_SRC_DIR)pppdump/Makefile
sed -i 's/-s//' $(PPP_SRC_DIR)pppstats/Makefile
make -C $(PPP_SRC_DIR) install
$(TARGET_STRIP) $(PPP_TARGET_DIR)/sbin/$(PPP_TARGET_NAME)