移植無非就三個步驟
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)