由于实习工作中要用到基于sftp协议开发一个网络程序,同时要实现运行在Windows平台上,找来找去就这个libssh2库好用,在网络上算是有那么一点点的文档可以看。这个库还不是现成的,还要进行源代码编译,自己弄,看起来很复杂的样子。最可恨的是居然还不是简单的make&&make install 就可以的,还要依赖库。linux下好像简单的yum一下就可以的样子(羡慕)。整个环境搭建起来用了2天了。写一下,以后没准还要看到。

0.安装msys-mingw环境

  先下载这个环境 http://liquidtelecom.dl.sourceforge.net/project/mingw/Installer/mingw-get-setup.exe

  

  我这里下载1 2 5 7这几个。选择后就下载吧。我是下载在D盘目录下,下载完运行这个程序D:\MinGW\msys\1.0\msys.bat 双击,然后就可以愉快的玩耍了。在里面随便测试几个命令,看是否正确安全。

1.安装zlib

  下载地址:https://github.com/madler/zlib 或者 http://www.zlib.net/ 自行下载

  

  编译完成后把目录下的 libz.a zconf.h zlib.h 三个文件复制出来,用于libssh2中 ,在此之前要判断是否可以用。测试用的程序

 #include <stdio.h>
#include "zlib.h" int main()
{
//原始数据
const unsigned char strSrc[]="hello world!\n\
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试\
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试"; unsigned char buf[]={},strDst[]={};
unsigned long srcLen=sizeof(strSrc),bufLen=sizeof(buf),dstLen=sizeof(strDst); printf("Src string:%s\nLength:%d\n",strSrc,srcLen);
//压缩 compress(buf,&bufLen,strSrc,srcLen);
printf("\nAfter Compressed Length:%d\n",bufLen);
printf("Compressed String:%s\n",buf);
//解压缩 uncompress(strDst,&dstLen,buf,bufLen);
printf("\nAfter UnCompressed Length:%d\n",dstLen);
printf("UnCompressed String:%s\n",strDst);
return ;
}

2.安装openssl

  下载地址 http://www.openssl.org/source/openssl-1.0.1f.tar.gz 其他版本同理下载
  msys mingw 自带perl 所以不用安装。进入openssl-1.0.1f目录下,然后运行
  ./Configure -DHAVE_STRUCT_TIMESPEC -L/mingw/lib -lz -lws2_32 --prefix=/mingw zlib mingw

  

  然后直接make 即可

  

  原来是上面zlib没有安装到对应的目录

  

  是这一级目录

  好吧复制完我们继续make

  

  这又是什么鬼,吓得我赶紧百度一下

  打开出错的文件,修改如下

   

  另外两个文件rc5test.c  jpaketest.c也同样处理

  第一次知道原来c语言还可以用,这种方式来玩,简直666666666

  不说了,继续make ,还好make工具可以跳过以前已经编译过的文件,不然每次10多分钟,不就哭了。

  

  终于make编译通过了,然后make install进行安装,这好像又是一个艰难的过程。不说了,写个例子测试一下。

  

  用于测试openssl库的例程

 #include <stdio.h>

 #include "openssl/ssl.h"

 int main ()
{
SSL_CTX* ctx = NULL;
const SSL_METHOD* meth = NULL; OpenSSL_add_ssl_algorithms(); // 初始化
SSL_load_error_strings(); // 为打印调试信息作准备
meth = TLSv1_client_method(); // 采用什么协议(SSLv2/SSLv3/TLSv1)在此指定
ctx = SSL_CTX_new (meth);
printf("%X\n", ctx); return ;
}

  这次要注意了,上面的命令设置openssl安装在/mingw下的,所以同理把D:\MinGW\msys\1.0\mingw下的所有文件复制到D:\MinGW 这个目录下进行覆盖。

3.安装libssh2库

  下面这个是准备编译libssh2了,下载地址http://www.libssh2.org/download/libssh2-1.5.0.tar.gz 进入到所在目录然后运行下面命令(前两步中要把libz 和 libssl 复制到编译器的include和lib目录)

  ./configure --prefix=/mingw --with-libz --with-openssl

  

  接下来make && make install

  

  同理将D:\MinGW\msys\1.0\mingw 目录下所有文件都复制到 D:\MinGW目录下。到这里就表示结束了。

4.编写测试例程

  下面这个是基于openssh的程序

 #include <stdio.h>
#include <libssh2.h>
#include <libssh2_sftp.h> int main()
{
LIBSSH2_SESSION * session;
LIBSSH2_SFTP *sftp_session;
LIBSSH2_SFTP_HANDLE *sftp_handle;
int ret = libssh2_init(LIBSSH2_INIT_NO_CRYPTO); session = libssh2_session_init(); libssh2_session_free(session);
libssh2_exit();
return ;
}

  写个编译代码把, mingw32-g++ main.cpp -o main -lxxx -lxxx -lxxx  , 这些xxx就是连接库了,你自己写一下,就会出现下面这些错误。不要问我怎么知道,我弄了2天,一直出现未定义错误,编译源代码10次左右,换了4-5个版本。各种找资料修改。

  错误举例

  

  

  我遇到的错误各式各样的都有,一开始还不知道要加入gdi32这个库(这个是在http://stackoverflow.com了解到的,http://stackoverflow.com/questions/6999086/linker-errors-when-statically-linking-libcurlopenssl-to-my-project ),还有从其他地方了解到-lssl要在lcrypto之前,以前有做过一个例子关于Windows socket的,那个-lws2_32库也是要放在最后才可以用,否则就各种错。那时也是弄了一两天,怎么没有长记性呢??这个链接库先后问题,以后一定要记得,至于网上关于这方面的讲解基本都没有,难道他们没有遇到这个坑吗?还是在linux真正环境下没有这个问题,而Windows环境下用的是dll和lib的连接库,而不是linux的so和a文件。所以没有这个问题,至于像我这种偏偏在Windows下用*nux下的东西,注定是坑,嗯,是这样的,一定是这个样子的。(肯定不是因为我长得丑,连编译器都欺负我。)

  下面这种是我试出来的一种可行编译顺序

$ g++ -o ssl main.cpp -lssh2 -lssl -lcrypto -lz -lws2_32 -lgdi32

  

5.吐槽一下

  为了实现libssh2这个开发环境,查看了晚上仅有的文章,弄了那么久,把过程中的伤心事说一下。

  网上,对于源代码编译libssh2的中文博客,目前应该只有 搭建ssh2协议的开发环境:openssl+libssh2库+Visual Studio 2008(http://blog.csdn.net/vsuan/article/details/4342015 )这一篇了,安装里面说的,安装了vs2008,安装了nasm工具,安装了activeperl工具实现perl环境,前两步还好,最后一步的libssh2安装就不行了,各种出错。(查了一下好像是本地或者什么地方的版本不对,或者我忘记配置什么把)。 没有办法,在http://slproweb.com/products/Win32OpenSSL.html 下载了win32Openssl-1.0.1m.exe 别人编译好的文件,http://www.winimage.com/zLibDll/index.html 下载zlib编译好的文件。从csdn上下载了编译好的libssh2文件,最后整合还是不能用,各种找不到。同时找了一些其他方式的安装方法,总之各种坑。最后找到这个How to Compile libssh2 for Windows with MinGW 文章,终于是可以用了,还不错也是mingw环境,这下可以玩耍了。

6.文件下载

  文件中包含我已经编译好的文件,和几个例程,编译好的库,复制到include和lib应该就可以了,我把文件放到我的codeblock里面是可以编译libssh2的程序的。

  http://files.cnblogs.com/files/wunaozai/libssh2.7z

  编译环境是用 mingw-get-setup.exe 下载的环境,其他三个库为 libssh2-1.5.0、openssl-1.0.1f、zlib-1.2.8

参考资料(这个有太多了,写个关键的)

http://blog.csdn.net/b_h_l/article/details/17010161

MinGW环境libssh2安装的更多相关文章

  1. Sublime Text3 & MinGW & LLVM CLang 安装配置C-C++编译环境

    Sublime Text是一款强大的跨平台代码编辑器,小巧而且丰富实用的功能是Visual Studio不能比拟的,但是编译运行是一个软肋,本文通过在sublime中配置g++编译器实现程序的编译功能 ...

  2. windows平台python 2.7环境编译安装zbar

    最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图 ...

  3. Theano环境搭建/安装

    关键词:theano安装,搭建theano环境, python, 深度学习 因为需要安装theano,结果发现这又是一个难以安装的python包-虽然网上教程不少,然而鱼龙混杂,试验了各种方法流程,最 ...

  4. Qt4.8.6与VS2008的集成开发环境的安装配置

    一.安装编译Qt 1. 在Windows下用Qt做开发,编译器可以用mingw的gcc/g++,也可以用VS. 2. 安装VS2008集成开发环境(完全安装).  3. 安装qt4.8.6(qt-op ...

  5. 第0课 - 搭建开发环境之安装QT

    第0课 - 搭建开发环境之安装Qt 1. 课程学习的原材料 — Visual Studio 2010 — Qt SDK 4.7.4 — Qt Creator 2.4.1 2. Visual Studi ...

  6. 【转】windows环境下安装win8.1+Mac OS X 10.10双系统教程

    先要感谢远景论坛里的各位大神们的帖子  没有他们的分享我也不能顺利的装上Mac OS X 10.10! 写这篇随笔主要是为了防止自己遗忘,同时给大家分享下我的经验. 本教程适用于BIOS+MBR分区的 ...

  7. 服务器运行环境(LNMP)安装说明

    服务器运行环境(LNMP)安装说明 因为公司需要一套流程标准,所以写了如下步骤. 先下载文件environment.tar,将文件上传到服务器. 使用命令解压文件,tar xvf environmen ...

  8. 在 windows 环境下安装 redislive

    这是一篇在 windows 环境下安装 redislive 的教程! 项目地址:https://github.com/nkrode/RedisLive 配置文档:http://www.nkrode.c ...

  9. windows环境下安装win8.1+Mac OS X 10.10双系统教程

    首先要感谢远景论坛里的各位大神们的帖子  没有他们的分享我也不能顺利的装上Mac OS X 10.10! 写这篇随笔主要是为了防止自己遗忘,同时给大家分享下我的经验. 本教程适用于BIOS+MBR分区 ...

随机推荐

  1. Jenkins中集成jmeter-maven插件

    转自:http://my.oschina.net/u/1377774/blog/168969 目录[-] 第一步.先在maven工程中单独使用jmeter-maven插件 0.环境 1.在POM.xm ...

  2. phpBB3.1和3.2

    闲逛看到一个帖子, phpBB3的论坛经常被机器人注册攻击, 要找人做拦截. 出于兴趣, 联系了一下. 论坛是一个做健康养老调查的社会机构的, 版本3.1, 十年前我还在更新phpbb中文包的时候, ...

  3. Java Web(5) Spring 下使用Junit4 单元测试

    1. 如何在不启动Tomcat服务器的情况下对,Dao这些不依赖使用Servlet API的类来进行单元测试呢? 其实在Spring框架体系中,已经有一套自己的测试代码,其中就是依赖使用Junit来进 ...

  4. Asp.Net通过ODBC连接Oracle数据库

    本来有个项目是通过安装Oracle client然后让asp.net引用System.Data.OracleClient来访问Oracle数据库的,但是不知道为什么老是报:ORA-12170:连接超时 ...

  5. 找不到android-support-v4 包的解决办法

    有时候在开发过程中,总是会遇到一些莫名奇妙的错误,或者在使用fragement和viewpage的时候,就会出现下面这个错误,如果出现找不到android-support-v4 包的时候,可以使用下面 ...

  6. asiHttpRequst 学习地址

    最全面的地址 http://blog.csdn.net/uxyheaven/article/details/7884734 http://allseeing-i.com/ASIHTTPRequest/ ...

  7. Linux-TCP之深入浅出send和recv

    内容摘自:TCP之深入浅出send和recv.再次深入理解TCP网络编程中的send和recv 建议阅读时参考:Unix环境高级编程-TCP.UDP缓冲区 概念 先明确一个概念:每个TCP socke ...

  8. [转载]linux下如何查看系统和内核版本

    原文地址:linux下如何查看系统和内核版本作者:vleage 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux version 2 ...

  9. 从html加载json文件想起

    原文来自:https://www.cnblogs.com/dibaosong/p/4572274.html#top 文中给出了data.json文件内容 还给出了html文件内容 ok. 1.新建工程 ...

  10. <转>lua解析脚本过程中的关键数据结构介绍

    在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...