交叉编译静态sshd/scp 工具记录

此文章主要用来记录我编译scp工具时的问题以及解决方法。

scp/sshd 来源于openssh开源项目,其依赖与zlib 与 openssl 两个开源工程,有些开源工程不适合用来交叉编译,我不确定原因,可能是用来学习源码或者其他什么功能。

三个开源项目分别使用下述网站下载源码:

wget http://www.zlib.net/zlib-1.3.tar.gz

wget https://www.openssl.org/source/openssl-3.2.0.tar.gz

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz

编译zlib

tar -xvf ../zlib-1.3.tar.gz

cd zlib-1.3/

prefix=~/work/CROSS_COMPILE_TOOL/install_dir/ CC=mips-linux-gnu-gcc CFLAGS="-static -fPIC" ./configure

make

make install

编译openssl

tar -xvf ../openssl-3.2.0.tar.gz

cd openssl-3.2.0

CC=gcc CROSS_COMPILE=mips-linux-gnu- ./config --prefix=~/work/CROSS_COMPILE_TOOL/install_dir/ no-asm linux-mips32 

make

make install

tar -xvf ../openssh-8.3p1.tar.gz

cd openssh-8.3p1/

./configure  --host=mips-linux-gnu  --with-zlib=~/work/CROSS_COMPILE_TOOL/install_dir --with-ssl-dir=~/work/CROSS_COMPILE_TOOL/install_dir LDFLAGS="-static -pthread"

此时会出错,提示:

checking if getpgrp accepts zero args... yes
configure: error: *** working libcrypto not found, check config.log

查看config.log 发现working libcrypto not found 只是配置时的log输出,具体错误是

~work/CROSS_COMPILE_TOOL/install_dir/lib/libcrypto.a(libcrypto-lib-threads_pthread.o): In function `CRYPTO_atom      ic_or':
threads_pthread.c:(.text+0x2cc): undefined reference to `__atomic_is_lock_free'

...

分析得知编译的openssl 生产的crypto静态库中使用了一些列的原子操作相关的库,查阅工具链得知,这些函数或变量由libatomic.a库提供,此时去修改 openssh configure文件中这部分的编译检查,加上atomic库则可。

configure 文件 12945 

12944 if test "x$openssl" = "xyes" ; then
12945         LIBS="-lcrypto $LIBS"
12946         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12947 /* end confdefs.h.  */

改为

12945         LIBS="-lcrypto -latomic $LIBS"

再重新运行 configure 配置即可成功。

make 可以得到scp 以及sshd等命令。

但是实际放在板子上使用的时候,会报各种错误,

此时有个简单办法,那就是使用轻量级的ssh ->dropbear

地址 :

Index of /dropbear/releases (ucc.asn.au)

也可以直接使用wget,下面这个包是验证过的:

wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2020.81.tar.bz2

...

tar -xvf ../dropbear-2020.81.tar.bz2

cd dropbear-2020.81/

./configure CC=mips-linux-gnu-gcc --with-zlib=../../install_dir --host=mips-linux-gnu  LDFLAGS="-static"

make

make scp

此时的scp是可以直接使用的,但会提示

/usr/bin/dbclient: No such file or directory
这个dbclient 是make是编译生成的,把dbclient copy到/usr/bin 目录下scp就可以正常使用了。

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值