linux编译expect_expect 交叉编译 - CSDN
  • 文章目录1.tcl编译2 .expect 编译 1.tcl编译 step1 : 下载tcl: https://nchc.dl.sourceforge.net/project/tcl/Tcl/8.6.8/tcl868-src.zip step2: 解压到/opt/expect/tcl8.6.8目录下 step3: 进入 /opt/expect/tcl8.6.8...

    1.tcl编译

    step1 :
    下载tcl: https://nchc.dl.sourceforge.net/project/tcl/Tcl/8.6.8/tcl868-src.zip

    step2: 解压到/opt/expect/tcl8.6.8目录下
    step3: 进入 /opt/expect/tcl8.6.8/unix目录下,运行 配置脚本:

    • ./configure --prefix=/opt/expect/tcl

    step4 :编译

    • make
      step5:编译安装:
    • make install

    然后拷贝文件:cp tclUnixPort.h …/generic/

    2 .expect 编译

    step1 :
    下载expect : https://nchc.dl.sourceforge.net/project/expect/Expect/5.45.3/expect5.45.3.tar.gz

    step2: 解压到/opt/expect/expect目录下
    step3: 进入/opt/expect/expect目录下,运行 配置脚本:
    ./configure --with-tcl=/opt/expect/tcl/lib/ --with-tclinclude=/opt/expect/tcl8.6.8/generic/ --build=arm-linux --prefix=/opt/expect/expect/

    step4 :编译

    • make
      step5:编译安装:
    • make install

    编译完成,expect可执行文件在expect目录下,其他文件在prefix指定的目录下。

    另外,编译完后,在tcl编译结果目录下,也有了expect的相关目标文件。

    展开全文
  • 交叉编译expect

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

    交叉编译 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
    这个也要拷贝到目标机器上

    展开全文
  • linuxexpect安装

    2018-05-30 21:53:24
    expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装下载:expect-5.43.0.tar和...

    expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!
    expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装

    下载:expect-5.43.0.tar和tcl8.4.11-src.tar
    下载地址:https://pan.baidu.com/s/1kVyeLt9
    提取密码:af9p

    将expect和tcl的软件包下载放到/usr/local/src目录下

    (1)解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装
    [root@xw4 src]# tar -zvxf tcl8.4.11-src.tar.gz
    [root@xw4 src]# cd tcl8.4.11/unix
    [root@xw4 unix]# ./configure
    [root@xw4 unix]# make && make

    (2)安装expect
    [root@xw4 src]# tar -zvxf expect-5.43.0.tar.gz
    [root@xw4 src]# cd expect-5.43.0
    [root@xw4 expect-5.43.0]# ./configure --with-tclinclude=/usr/local/src/tcl8.4.11/generic --with-tclconfig=/usr/local/lib/
    [root@xw4 expect-5.43.0]# make && make install

    (3)安装完成后进行测试
    [root@xw4 ~]# expect
    expect1.1>
    expect1.1>

    展开全文
  • expect是脚本处理有交互命令的利器,但是这货依赖tcl,并且默认没有安装。为了方便分发到测试服务器上,尝试了下静态编译。结果以失败告终。下面是整个编译的过程。 编译tcl静态库 由于expect依赖tcl,必须先编译一...

    expect是脚本处理有交互命令的利器,但是这货依赖tcl,并且默认没有安装。为了方便分发到测试服务器上,尝试了下静态编译。结果以失败告终。下面是整个编译的过程。

    编译tcl静态库

    由于expect依赖tcl,必须先编译一个静态版本的tcl库。tcl的源码可以从阿里云镜像下载:


    wget http://mirrors.aliyun.com/gentoo/distfiles/tcl-core8.6.4-src.tar.gz
    


    编译的方式和编译普通应用类似,唯一需要注意的是,我们只需要编译出静态库即可。


    tar vxf tcl-core8.6.4-src.tar.gz 
    cd tcl8.6.4/unix/
    ./configure --disable-shared --prefix=$HOME/source/target
    make
    make install
    


    这里我们直接安装到指定的路径,并且关闭动态链接库的编译。这样在$HOME/source/target里面,就会tcl的静态库。

    编译expect

    首先还是从镜像下载expect源码。


    wget http://mirrors.aliyun.com/gentoo/distfiles/expect5.45.tar.gz
    

    然后运行configure的时候,需要指定tcl的路径,并且关闭动态链接。


    tar vxf expect5.45.tar.gz 
    ./configure --with-tcl=$HOME/source/target --disable-shared
    make
    

    这里遇到了很多链接的问题。首先是


    expect.c:(.text+0xbc):对‘tclStubsPtr’未定义的引用
    exp_main_sub.c:(.text+0x6fb):对‘tclIntStubsPtr’未定义的引用
    tclUnixThrd.c:(.text+0x31):对‘pthread_key_delete’未定义的引用
    


    这些符号无法找到,无法进行链接。向上查找这些错误对应的编译命令,发现已经在链接最终的expect命令了。此时的编译命令为:


    gcc 
         -pipe -O2 -fomit-frame-pointer -Wall  
         -Wl,--export-dynamic  
        -o expect exp_main_exp.o 
        -L/alidata1/6080/source/expect5.45 -lexpect5.45 
        -L/alidata1/6080/source/target/lib -ltcl8.6 
        -ldl  -lieee -lm 
        -Wl,-rpath,/alidata1/6080/source/target/lib 
        -Wl,-rpath,/alidata1/6080/source/target/lib/expect5.45

    查阅了tcl的faq,前面遇到无法链接的符号在tclstub库中,同时还发现少了pthread库的一些符号。加上这些之后,编译命令变成:


    gcc 
         -pipe -O2 -fomit-frame-pointer -Wall  
         -Wl,--export-dynamic  
        -o expect exp_main_exp.o 
        -L/alidata1/6080/source/expect5.45 -lexpect5.45 
        -L/alidata1/6080/source/target/lib -ltcl8.6 
        -ldl  -lieee -lm 
        -Wl,-rpath,/alidata1/6080/source/target/lib 
        -Wl,-rpath,/alidata1/6080/source/target/lib/expect5.45 -ltclstub8.6 -lpthread

    此时tcl和一些基础库的链接失败消失,但是出现了


    pty_termios.c:(.text+0x116):对‘openpty’未定义的引用
    


    这个错误。同样需要去查找这个函数实现的库,最终定位到了libutil。

    最终将编译命令修改成:


    gcc 
         -pipe -O2 -fomit-frame-pointer -Wall  
         -Wl,--export-dynamic  
        -o expect exp_main_exp.o 
        -L/alidata1/6080/source/expect5.45 -lexpect5.45 
        -L/alidata1/6080/source/target/lib -ltcl8.6 
        -ldl  -lieee -lm 
        -Wl,-rpath,/alidata1/6080/source/target/lib 
        -Wl,-rpath,/alidata1/6080/source/target/lib/expect5.45 -ltclstub8.6 -lpthread -lutil

    终于能够正常编译出静态编译的expect命令了。

    就在以为完事大吉的时候,发现这个静态编译的expect命令,虽然已经静态链接了tcl库,但是在其他没有tcl的机器上运行的时候,会提示:


    Tcl_Init failed: Can't find a usable init.tcl in the following directories
    


    原来为了支持扩展,tcl会要求初始化的时候执行这个初始化脚本。查阅了tcl的文档,要编译一个完全不依赖机器上tcl库的程序比较麻烦。最终,找到了一个简单的命令empty来处理命令的交互。


    转载自:https://coolex.info/blog/515.html

    展开全文
  • expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下载:expect-5.43.0.tar和tcl8.4.11-src.tar 下载地址:https://pan.baidu.com/s/1kVyeLt9  提取密码:af9p 将ex
  • Linux安装expect命令

    2020-02-21 19:01:34
    yum install expect 第二种方式: 安装Tcl: 下载源码包: http://www.tcl.tk/software/tcltk/downloadnow84.tml http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.20-src.tar.gz 解压编译安装: tar -zxvf tcl...
  • linuxexpect的安装方法 1、 首先,准备好所需的两个安装包 tcl8.4.13-src.tar.gzexpect-5.43.0.tar.gz 2、 安装tcl8.4.13 Tcl 的 configure 脚本有一个语法错误,下面的命令可以纠正它:sed -i "s/relid/relid...
  • 介绍expect是建立在tcl基础上的一个工具,它可以让一些需要交互的任务自动化地完成。相当于模拟了我们和命令行的交互操作。 一个具体的场景:远程登陆服务器,并执行命令
  • linux下安装expect

    2009-11-30 14:51:00
    我试验的环境是SuSe Linux 10.1 expect的主页:http://expect.nist.gov/最新稳定版5.43.0的下载地址:http://expect.nist.gov/expect.tar.gzexpect依赖于tcl/tk,因此在安装expect之前先安装tcl/tk。tcl/tk8.4.16的...
  • 一、下载源码: ... Expect源码:http://sourceforge.net/projects/expect/files/latest/download?source=files   二、编译arm版本和x86版本的TCL工具 1.设置环境变量: export tcl_cv_ty...
  • LINUX EXPECT的安装今天同事要求在两台新装的LINUX系统上安装expect。说实话还真不知道这个东西是干什么的。后来查了一下,赶紧补习补习Expect [is a] software suite for automating interactive tools。使用它...
  • expect是交互性很强的脚本语言,可以帮助运维人员...expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下载:expect-5.43.0.tar和tcl8.4.11-src.tar 下载地址:https://pan.baidu.com/s/1kVyeLt...
  • 参考http://blog.chinaunix.net/uid-23089249-id-4762021.html下载expect源码,tcl源码先交叉编译tclcd /home/mit/update/tcl8.6.8/unixCC=arm-poky-linux-gnueabi-gcc AR=arm-poky-linux-gnueabi-ar LD=arm-poky-...
  • vim exec_expect_sftp.sh #/usr/bin/expect -f #参数1 usrname 参数2 passwd 参数3 ip 参数4 dir set userna [lindex $argv 0] set passwd [lindex $argv 1] set ip [lindex $argv 2] set dir [lindex $argv 3] ...
  • 一、Expect介绍及应用场景  Expect是一个用来实现自动交互功能的软件套 件(Expect [is a] software suite for automating interactive tools)。使用它系统管理 员的可以创建脚本用来实现对命令或程序提供输入,...
  • 移植自动交互工具expect5.45到arm linux(tcl8.6.3移植) 2015-01-15 20:00:32 分类: 嵌入式 ...原文:移植自动交互工具...Linux shell 交互式编程、TCL/TK 和 Expect 编译与安装、expect 编程 Expect+TCL
  • 一、有时需要在脚本中登录需要密码验证的机器或者使用脚本ssh scp登录 复制文件时,需要输入密码,使用expect就能对不同输入进行交互。...set timeout 5; spawn /usr/bin/scp -r /home/dev/log dev@...expect { \”yes/n
  • gcc提供了大量优化选项,用来对编译时间,目标文件长度,执行效率三个维度进行不同的取舍和平衡。 gcc 常用编译选项 -c 只编译并生成目标文件。 -E 只运行 C 预编译器。 -g 生成调试信息。GNU 调试器可利用该...
1 2 3 4 5 ... 20
收藏数 7,630
精华内容 3,052
关键字:

linux编译expect