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
结束。




被折叠的 条评论
为什么被折叠?



