移植 expect(openwrt X86主机)

下载源码:

TCL源码:
http://iweb.dl.sourceforge.net/project/tcl/Tcl/8.6.4/tcl8.6.4-src.tar.gz

Expect源码:
http://colocrossing.dl.sourceforge.net/project/expect/Expect/5.45/expect5.45.tar.gz

由于 expect 是基于 tcl 语言的,所以需要先编译 TCL。

交叉编译 TCL
tcl 直接交叉编译,会提示重复定义失败,所以先执行下面的声明

export tcl_cv_type_64bit="long long"
export ac_cv_c_bigendian=no
export tcl_cv_strtod_buggy=1
export ac_cv_func_strstr=yes
export ac_cv_func_opendir=yes

然后 生成 Makefile

./configure --prefix=$PWD/tmp --host=i486-openwrt-linux --build=i686-linux

# --prefix 安装路径
# --host   平台架构(编译出的程序在哪个平台运行,就用那个平台的工具链名去掉 gcc)
# --build  编译的主机

生成 Makefile 之后 就执行

make

# make 之后有提示错误,就解决掉错误
# 比如提示少某个库,就去制作工具链的目录下找,找到就cp过去,找不到,就自己下载源码,然后交叉编译,然后cp过去
# 提示少某个头文件,就去找个头文件 cp 过去。这次我缺少的头文件,有一部分是直接拿的PC的头文件

# make 之后 执行 make install
# 注意设置的安装路径

make install

交叉编译 expect
由于 expect 不支持交叉编译,所以生成 Makefile 时需要先用 X86 的 gcc,生成 Makefile 之后在修改 Makefile 的CC

./configure --prefix=$PWD/tmp --with-tcl=/home/gino/tcl8.6.4/unix/tmp/lib --with-tclinclude=/home/gino/tcl8.6.4/unix/tmp/include

# --with-tcl  指定tcl安装目录下的lib路径(要交叉编译过的)
# --with--tclinclude 指定tcl安装目录下的 include 路径

修改 Makefile

CC      = i486-openwrt-linux-gcc

然后 执行 make
执行 make 之后一样会提示缺这个 少那个,想办法搞定吧。
这里只描述一个关于 ieee 库(因为这个需要源码编译 =。=)
下载地址:https://launchpadlibrarian.net/10140745/libieee1284_0.2.11.orig.tar.gz

下载之后 解压 交叉编译

./configure --prefix=$PWD/tmp --host=i486-openwrt-linux --build=i686-linux
make
# make 有错,想办法搞定
make install

将安装目录的 lib目录下、include目录下的文件,拷贝到交叉工具链下对应的目录

cp lib/* /opt/openwrt-i386-gcc/lib
cp inlucde/* /opt/openwrt-i386-gcc/include

做完这些之后,去到 expect 目录,继续执行 make,还是会报错。需要改 expect 的 Makefile
修改之后的内容如下:

expect: exp_main_exp.o $(PKG_LIB_FILE)
        $(CC) \
                 -pipe ${CFLAGS_DEFAULT} ${CFLAGS_WARNING} ${SHLIB_CFLAGS}  \
                 -Wl,--export-dynamic  \
                -o expect exp_main_exp.o \
                -L/work/src/openwrt_x86/expect5.45 -lexpect5.45 \
                -L/work/src/openwrt_x86/expect/tcl8.4.20/unix/tmp/lib -ltcl8.4 \
                -ldl  -lieee1284 -lutil -lm \
                -Wl,-rpath,${LIB_RUNTIME_DIR} \
                -Wl,-rpath,${LIB_RUNTIME_DIR}/${PACKAGE_NAME}${PACKAGE_VERSION}
        $(SETUID) expect

再次 make 就成功了。

测试运行
要在目标机上运行这个程序,需要把交叉编译后的 tcl(安装目录下) ieee(安装目录下) 的库文件(安装目录下的lib下的所有文件) 以及 expect的动态库(libexpect5.45.so) 和 expect的执行文件都拷贝到目标机器上。

本文参考:http://blog.csdn.net/aa120515692/article/details/47122773

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值