交叉编译expect

交叉编译 expect 需要先编译如下依赖包:tcl
tcl源码下载:
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
我的目标主机是一台运行着openwrt系统的x86机器。工具链为 i486-openwrt-linux-

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

生成 Makeflie 文件后,需要修改Makeflie 里面的 CC。默认是 gcc
。改为 i486-openwrt-linux-gcc
make
发现报错。找不到 ieee 这个库。于是只好到网上去找:

找到一个 ieee1284 的库。解压:

CC=i486-openwrt-linux-gcc ./configure --prefix=$PWD/tmp --host=i486-openwrt-linux --build=i686-linux
make
make install
//拷贝所有 库 到工具链的 lib 目录
cp * -rfd /opt/OpenWrt-Toolchain-x86-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-i386_i486_gcc-4.8-linaro_uClibc-0.9.33.2/lib/
//拷贝头文件到工具链的 include 目录
cp * /opt/OpenWrt-Toolchain-x86-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-i386_i486_gcc-4.8-linaro_uClibc-0.9.33.2/include/

编译发现还是没有找到 ieee。原来我下载的源码库是 ieee1284.于是把makefile文件里面所有 ieee 都改成 ieee1284
在编译。成功
make install 安装到当前目录下的tmp目录。
安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。
暂时不要删除tcl源代码,因为expect的安装过程还需要用。

交叉编译 expect

./configure --prefix=$PWD/tmp --host=i686-linux --build=i686-linux --with-tcl=/work/src/openwrt_x86/expect/tcl8.4.20/unix/tmp/lib --with-tclinclude=/work/src/openwrt_x86/expect/tcl8.4.20/generic

修改 makeflie 把 gcc 改成 i486-openwrt-linux-gcc 把所有ieee改成ieee1284
修改

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

在 连接库行加上 -lieee1284 -lutil 否则编译会报错

再次 make 发现没问题

记得要在目标机器上面运行这个程序的话,需要把前面的交叉编译的 tcl ieee 库文件都拷贝到目标机器上。同时再 expect 目录下会生成一个
libexpect5.45.so
这个也要拷贝到目标机器上

 

上一篇:交叉编译expect


下一篇:OpenWrt自动登录Portal脚本