Ubuntu安装libevent(libevent-2.0.21-stable)及各种出错的解决方案

       最近学习服务器开发,libevent是一个轻量级的高性能I/O框架库,通过使用、分析libevent可以很好的学习网络编程,同时在阅读libevent源码的过程中可以提高自己的编程技巧和代码架构能力。当然了,首先要做的工作就是安装libevent,我从官网下载了libevent-2.0.21和libevent-1.4.15两个版本,对于使用来说还是新版的比较好,但新版的结构比较庞杂,代码量比较大,对于阅读源码来说还是前期版本比较合适,功能齐全而且体量小。

       由于我是在Windows系统下用虚拟机安装Ubuntu系统,下载的libevent在Windows系统,所以需要将其移动到虚拟机中,虽然更新过VMware tools,但是直接拖文件的操作仍然会出现文件夹中文件丢失的问题,刚好之前用过SSH,就选择SSH登陆Ubuntu,因为好久没用,而且Ubuntu是新安装的,出现了很多问题,在此记录。

  下文中二级标题使用蓝色字体显示,终端命令均通过加黑显示,命令执行或者各项步骤中出错均使用红色字体显示,便于强调,方便大家识别。

主机通过SSH登陆局域网其他主机(此处使用为Windows主机SSH登陆虚拟机内Ubuntu系统):

  1. 安装openssh
    sudo apt-get install openssh-server
    安装过程中会有一次询问,输入“yes”

  2. 修改root密码(root用户默认不存在,首次使用需要设置密码)
    sudo passwd root
    首先输入当前用户密码,然后输入两次你要设置的root密码

  3. 编辑配置文件,允许root用户使用SSH服务
    sudo vim /etc/ssh/sshd_config
    如果没有安装vim,将vim改为vi,vim或者vi的操作自行学习
    找到:PermitRootLogin prohibit-password(禁用的意思) 用#注释掉
    添加:PermitRootLogin yes
    sudo service ssh restart
    学习自:解决Ubuntu 16.04 SSH 无法远程登录问题

  严格按照以上步骤基本可以成功使用SSH,但还有可能遇到另一个问题:报“algorithm negotiation failed”错误,这个错误是由于服务器端更新过SSH,但客户端的版本比较低,新版本为了安全默认取消了原来的一些加密算法,我们手动添加进去就好:

  1. 更改文件权限
    chmod 777 /etc/ssh/sshd_config

  2. 编辑配置文件,添加被取消的加密算法
    sudo vim /etc/ssh/sshd_config

  3. 重启sshd服务
    sudo service sshd restart

步骤2中需要添加的部分:

Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc

MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96

KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org

学习自:SSH Secure Shell登录报错: Ubuntu SSH Algorithm negotiation failed

安装libevent

  1. 从libevent.org下载需要的版本
    这里选用的是libevent-2.0.21-stable版本。
  2. 按照README中的描述进行编译生成库文件
    此版本没有configure.sh文件,需要先运行autogen.sh文件生成configure文件,但在执行“sudo ./autogen.sh”命令时报错
    “./autogen.sh: 11: ./autogen.sh: aclocal: not found”
    这是由于电脑中没有安装automake工具造成的,运行如下命令即可解决:
    sudo apt-get install autoconf automake libtool
    此解决方案来自于安装tslib中遇到的错误:./autogen.sh: 4: autoreconf: not found
    然后根据README文件继续,但在执行命令之前要切记切换到root用户,直接在命令前加”sudo”的操作不可行,编译到最后会报错,需要先将当前用户切换到root:
    su root
    输入root密码(如果不知道root密码可翻阅上文的修改root密码部分),然后继续执行:
    ./autogen.sh
    然后会链接生成可执行的configure文件,继续执行:
    ./configure && make
    这里的&&其实就是把两个命令放到一起,效果等同于分别执行”./configure”和”make”。
    继续(以root身份)执行(这是一个回归测试命令,因为里面有win32的test程序,所以Ubuntu执行会报错,这一步可忽略,直接执行下一步安装):
    make verify(回归测试,建议忽略这一步)
    make install

  至此,libevent就成功的安装进你的系统里啦,你可以在/usr/local/lib文件夹中找到它(们)了,接下来,就可以直接在你的程序中通过头文件的形式包含libevent库了。
测试libevent
  可以直接到/usr/local/lib文件夹查看libevent,也可以通过命令直接显示:
  ls -al /usr/local/lib | grep libevent
  这里给出一个简单的测试用例test.cpp,代码如下:

#include 

#include 

struct event ev;
struct timeval tv;

using namespace std;

void time_cb(int fd, short event, void *argc)
{
    cout << "timer wakeup" << endl;
    event_add(&ev, &tv);
}

int main()
{
    struct event_base *base = event_init();

    tv.tv_sec = 10;
    tv.tv_usec = 0;
    evtimer_set(&ev, time_cb, NULL);
    event_add(&ev, &tv);
    event_base_dispatch(base);

    return 0;
}

  然后进行编译执行,首先进入代码文件所在文件夹,编译:
  g++ test.cpp -o test -levent
  执行:
  ./test
  执行结果如下则运行成功。

  Ubuntu安装libevent(libevent-2.0.21-stable)及各种出错的解决方案_第1张图片

你可能感兴趣的:(网络编程,网络编程,服务器,libevent安装)