libssh 交叉编译

1、资源准备

        下载libssh:libssh-0.11.1.tar

        下载zlib:zlib-1.2.11.tar.gz(http://www.zlib.net/zlib-1.2.11.tar.gz)

        下载openssl:openssl-1.1.1.tar.gz(http://www.openssl.org/source/openssl-1.1.1.tar.gz)

        注:zlib和openssl的链接可直接在迅雷中新建下载获取,也可用wget下载。

2、编译环境配置

        export CC=arm-linux-gcc

        export CXX=arm-linux-g++

        export AR=arm-linux-ar

        export RANLIB=arm-linux-ranlib

3、openssl-1.1.1编译

        解压openssl:tar -zxf openssl-1.1.1.tar.gz        

        进入openssl-1.1.1:cd openssl-1.1.1

        配置编译脚本:./config no-asm shared --prefix=/usr/local/arm-4.9.4/openssl-1.1.1

        执行编译:make && make install

        若出现以下错误,则需修改Makefile文件:        

        打开Makefile文件,将-m64选项全部删除,一般有两个        

        修改为:        

        再次执行make && make install

       查看安装目录,编译成功:

4、zlib-1.2.11编译

        解压zlib:tar -zxf zlib-1.2.11.tar.gz

        进入目录zlib-1.2.11:cd zlib-1.2.11

        配置编译脚本:./configure --shared --prefix=/usr/local/arm-4.9.4/zlib-1.2.11

        执行编译:make && make install

        查看安装目录检查安装结果:

5、libssh-0.11.1编译

        解压libssh:tar -xf libssh-0.11.1.tar

        进入libssh目录:cd libssh-0.11.1

        创建build目录并进入:mkdir build && cd build

        cmake生成Malefile:       

cmake ../ -DCMAKE_INSTALL_PREFIX=./ -DZLIB_LIBRARY=/usr/local/arm-4.9.4/zlib-1.2.11/lib/libz.so -DZLIB_INCLUDE_DIR=/usr/local/arm-4.9.4/zlib-1.2.11/include -DOPENSSL_ROOT_DIR=/usr/local/openssl-1.1.1

        执行编译:make

        若出现以下错误,我们可查看lib目录下的文件内容:

/opt/toolchain/arm-linux-4.9.4/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: warning: libcrypto.so.1.1, needed by ../lib/libssh.so.4.10.1, not found (try using -rpath or -rpath-link)
/opt/toolchain/arm-linux-4.9.4/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: warning: libz.so.1, needed by ../lib/libssh.so.4.10.1, not found (try using -rpath or -rpath-link)
../lib/libssh.so.4.10.1: undefined reference to `EVP_MD_CTX_free@OPENSSL_1_1_0'
../lib/libssh.so.4.10.1: undefined reference to `EVP_DecryptFinal@OPENSSL_1_1_0'

        可观察到已经存在libssh的动态库,如果只想编译libssh的动态库则执行到这里已经完成了。        

        如果想解决问题则需要将openssl和zlib的动态库拷贝至lib目录下重新编译:

cp /usr/local/arm-4.9.4/openssl-1.1.1/lib/lib* ./lib/
cp /usr/local/arm-4.9.4/zlib-1.2.11/lib/libz.* ./lib/

        重新编译:make

        以下错误说明main函数中存在return没有返回值,需要修改源代码:

     ^
/home/anerlu/Work/sftpDebug/libssh/libssh-0.11.1/examples/ssh_X11_client.c:178:5: 警告: ISO C90 不允许指定子对象的初始值 [-Wpedantic]
     .channel_open_request_x11_function = x11_open_request_callback,
     ^
/home/anerlu/Work/sftpDebug/libssh/libssh-0.11.1/examples/ssh_X11_client.c:179:5: 警告: ISO C90 不允许指定子对象的初始值 [-Wpedantic]
     .userdata = NULL
     ^
/home/anerlu/Work/sftpDebug/libssh/libssh-0.11.1/examples/ssh_X11_client.c: 在函数‘_logging_callback’中:
/home/anerlu/Work/sftpDebug/libssh/libssh-0.11.1/examples/ssh_X11_client.c:235:13: 警告: ISO C90 不支持‘j’gnu_printf 长度修饰符 [-Wformat=]
             function, buffer);
             ^
/home/anerlu/Work/sftpDebug/libssh/libssh-0.11.1/examples/ssh_X11_client.c: 在函数‘main’中:
/home/anerlu/Work/sftpDebug/libssh/libssh-0.11.1/examples/ssh_X11_client.c:950:1: 错误: 在有返回值的函数中,控制流程到达函数尾 [-Werror=return-type]
 }
 ^
cc1:有些警告被当作是错误
make[2]: *** [examples/CMakeFiles/ssh-X11-client.dir/build.make:76:examples/CMakeFiles/ssh-X11-client.dir/ssh_X11_client.c.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:408:examples/CMakeFiles/ssh-X11-client.dir/all] 错误 2

        打开文件,在最后一行添加return 0:vim /home/anerlu/Work/sftpDebug/libssh/libssh-0.11.1/examples/ssh_X11_client.c

        再次重新编译:make

        至此libssh编译完成,可查看example下,可执行文件已经生成:

root@anerlu-PC:build# ls examples/ -l
总计 500
drwxr-xr-x 19 root root  4096 11月 23 07:20 CMakeFiles
-rw-r--r--  1 root root  1271 11月 23 07:12 cmake_install.cmake
-rwxr-xr-x  1 root root 21089 11月 23 07:28 exec
-rwxr-xr-x  1 root root 11041 11月 23 07:28 keygen
-rwxr-xr-x  1 root root 26685 11月 23 07:28 keygen2
-rwxr-xr-x  1 root root 18099 11月 23 07:28 libsshpp
-rwxr-xr-x  1 root root 14073 11月 23 07:29 libsshpp_noexcept
-rwxr-xr-x  1 root root 29161 11月 23 07:24 libssh_scp
-rw-r--r--  1 root root 54219 11月 23 07:12 Makefile
-rwxr-xr-x  1 root root 26989 11月 23 07:24 samplesftp
-rwxr-xr-x  1 root root 28764 11月 23 07:24 sample_sftpserver
-rwxr-xr-x  1 root root 17169 11月 23 07:28 samplesshd-cb
-rwxr-xr-x  1 root root 19531 11月 23 07:28 samplesshd-kbdint
-rwxr-xr-x  1 root root 25146 11月 23 07:24 scp_download
-rwxr-xr-x  1 root root 20946 11月 23 07:28 senddata
-rwxr-xr-x  1 root root 28290 11月 23 07:24 ssh-client
-rwxr-xr-x  1 root root 25968 11月 23 07:24 sshnetcat
-rwxr-xr-x  1 root root 25862 11月 23 07:28 ssh_server_fork
-rwxr-xr-x  1 root root 25909 11月 23 07:28 ssh_server_pthread
-rwxr-xr-x  1 root root 37317 11月 23 07:28 ssh-X11-client

        结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值