最近做mysql代理层读写分离,发现在C,C++领域libevent很厉害的样子。
1. 安装libevent
linux下源码安装或者直接yum安装。
libevent只是一套对一些底层技术的封装,自己本身并不像其他linux使用yum安装的软件一样会在/usr/bin/下有可执行文件,他只是一套动态链接库。即你可以在你的C程序中使用他.
yum install libevent
yum install libevent-devel
如果是源码安装,可能会麻烦点,因为你在指定安装路径的时候,可能和系统不识别的库不录不一致,比如你系统是64位的,你却将动态连接库装在了你的当前目录/root/,那么这样需要将你当前这台机器的/etc/ld.conf.d/下增加一个文件,名字任意,内容为/root
保存退出后指定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到我们自己的项目中,在当前路径下该更能识别了吧。
2. 创建项目。
最简单的项目其实就是一个C文件
#include <stdio.h> #include "event.h" int main() { printf("helloworld~ "); 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下的头文件,当然找到头文件并没有多大用,还的找到头文件中定义的那些方法的源码生成的动态库的位置。