最近作mysql代理层读写分离,发如今C,C++领域libevent很厉害的样子。 mysql
1. 安装libeventlinux
linux下源码安装或者直接yum安装。sql
libevent只是一套对一些底层技术的封装,本身自己并不像其余linux使用yum安装的软件同样会在/usr/bin/下有可执行文件,他只是一套动态连接库。即你能够在你的C程序中使用他.缓存
yum install libevent
yum install libevent-devel
若是是源码安装,可能会麻烦点,由于你在指定安装路径的时候,可能和系统不识别的库不录不一致,好比你系统是64位的,你却将动态链接库装在了你的当前目录/root/,那么这样须要将你当前这台机器的/etc/ld.conf.d/下增长一个文件,名字任意,内容为/rootspa
保存退出后指定ldconfig,ldconfig是linux系统的搜索系统下默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 连接库(格式如前介绍,lib*.so*),进而建立出动态装入程序(ld.so)所需的链接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态连接库名字列表。即ldconfig是找到了咱们本身的/root目录下的全部动态库名而且存入了/etc/ld.so.cache缓存文件。在咱们程序运行过程当中,就会动态连接到/etc/ld.so.cache文件中指明的文件了。代理
例外,因为咱们是使用的yum的安装方式安装的libevent-devel,因此其头文件都是仿制在该计算机系统识别的默认路径上,若是咱们直接使用gcc就根本不用指定头文件的地址。固然若是咱们没有安装libevent-devel,也能够copy到咱们本身的项目中,在当前路径下该更能识别了吧。code
2. 建立项目。blog
最简单的项目其实就是一个C文件开发
#include <stdio.h> #include "event.h" int main() { printf("helloworld~\n"); struct event_base *events; }
执行源码
gcc test.c
能够看到生成了一个a.out文件
执行
./a.out
能够获得输出,而且证实/usr/include 下的event.h是在gcc中是默认识别的。而且建立一个一个未使用的结构提events.
由以上得出:
linux在使用gcc对源码进行编译的时候,除了开发者本身指定的路径,当前路径,还包括系统本身默认的路径,好比/usr/lib64,就包括不少so动态连接库,而所谓的动态连接库是由C或C++程序经过GCC生成的不带main方法的一对程序集合,这些程序集合能够给其余main程序提供支持,固然同时得有头文件的定义。动态连接的意思是在程序已经编译经过,在运行过程当中连接该连接库中的代码的过程,而静态连接是直接将静态连接库做为咱们代码中的一部分进行编译,这样作程序执行速度会比较快,可是对于系统存储空间会占用的比较多。
另外头文件在系统中使用yum install *-devel 会安装到/usr/include中,包括 kernel的头文件,会存储在/usr/include/sys中,因此咱们在一些C程序中会看到:
#include <sys/epoll.h>
这样的代码,实际上就是去找到了/usr/include/sys/epoll.h下的头文件,固然找到头文件并无多大用,还的找到头文件中定义的那些方法的源码生成的动态库的位置。