最近做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~\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下的头文件,当然找到头文件并没有多大用,还的找到头文件中定义的那些方法的源码生成的动态库的位置。

libevent使用<一> libevent导入项目的更多相关文章

  1. 解决Android studio导入项目卡死

    在使用Android studio的时候常常遇到这样的问题,从github或是其他地方导入项目,Android studio呈现卡死的现象!当遇到这种情况时,可以看看是下面那种情况,在按照方法来解决! ...

  2. Android Studio导入项目问题小结

    1. import project 之后一直停留在 building 界面 解决方案: 1.随便找一个你能运行的as项目 2.打开gradle-wrapper.properties,文件目录:项目/g ...

  3. Eclipse导入项目出现红色叹号的解决方法

    情景: 我在另一台电脑开发Java Web项目,开发环境为 JDK 1.7,Tomcat v7.0,然后导入另一台电脑上,开发环境为为 JDK 1.8,Tomcat v8.0. 问题: 导入项目出现红 ...

  4. 导入项目时,有关[2016-04-03 20:38:02 - Dex Loader] Unable to execute dex: Multiple dex files 问题

    最近我在学习androidUI设计,在网上找了一个UI菜单界面开源代码示例,按照步骤导入项目,运行的时候控制台结果报了如下错误: [2016-04-03 20:38:02 - Dex Loader] ...

  5. Android Studio在创建/导入项目的时候,一直处于building “XXX”gradle project info的解决办法

    Android Studio在新建项目或者导入项目的时候,可能会一直处于building “XXX”gradle project info的状态,而且还取消不了,无奈之下只能干掉进程... 还有一种情 ...

  6. 【问题】AndroidStudio导入项目一直卡在Building gradle project infod的最快速解决方案

    原因 AndroidStudio导入项目一直卡在Building gradle project info的原因, 是因为导入的这个项目使用的gradle版本与本地已经拥有的gradle版本不一致,导致 ...

  7. 【转】libevent和基于libevent的网络编程

    转自: http://www.cnblogs.com/nearmeng/p/4043548.html 1 libevent介绍和安装 介绍 libevent是一个轻量级的基于事件驱动的高性能的开源网络 ...

  8. AndroidStudio导入项目一直卡在Building gradle project info最快速解决方案

    AndroidStudio导入项目一直卡在Building gradle project info,实际上是因为你导入的这个项目使用的gradle与你已经拥有的gradle版本不一致,导致需要下载该项 ...

  9. 【笔记】android sdk集成的eclipse中导入项目

    android sdk集成的eclipse中导入项目 想要把旧的ADT项目,一模一样的导入进来,需要: 1.把项目放到,非当前ADT的workspace目录下: 2.从Project中Import,选 ...

  10. Android Studio导入项目非常慢的解决办法

    问题 Android Studio目前已经更新到2.0 Preview 6了,作为Google大力推崇的开发工具,相对于Eclipse ADT有着不可比拟的优势.然而在实际使用时,依然有不少不爽的地方 ...

随机推荐

  1. ibatis传入数组或List

    小结一下ibatis框架下,传入参数为数组类型或者是List类型的sql写法.标签里面都不需要表名 1.传入字符串数组,不需要标明parameterClasss,数组和List类型对象一样都可以用&l ...

  2. net异步线程注意事项

      某人(不是我写的)写的异步代码:(还请博友们点评哈~) AsyncEventHandler[] asy = new AsyncEventHandler[ResultCount]; IAsyncRe ...

  3. VS2013的virtualpath在当前应用程序根的外部

    将项目升级到VS2013环境时,运行报"virtualpath 在当前应用程序根的外部"错误,如下图 搜寻解决方法如下: 1.禁用VS2013 IDE的浏览链接视图功能 2.在We ...

  4. iOS 并发编程指南

    iOS Concurrency Programming Guide iOS 和 Mac OS 传统的并发编程模型是线程,不过线程模型伸缩性不强,而且编写正确的线程代码也不容易.Mac OS 和 iOS ...

  5. 基础-训练营-day1~day5

    基础 大纲  变量:      声明.初始化.使用.命名  数据类型:      int.long.double.boolean.char.String  运算符:      赋值.算术.关系.逻辑  ...

  6. zabbix配置发送报警邮件

    配置邮件分为两种情况: 第一种:使用远端邮件服务器发送报警邮件 Linux系统版本:CentOS6.5-64 下载mailx: http://nchc.dl.sourceforge.net/proje ...

  7. 脚本编程中的test、bash调试、变量计算、参数

    脚本编程中的test.bash调试.变量计算.参数 1.文件测试 -e FILE:测试文件是否存在 -f FILE:测试文件是否为普通文件 -d FILE:测试路径是否为目录 -r FILE:测试当前 ...

  8. Windows 下用 gogs 配置局域网 git server

    大道曙光 Windows 下用 gogs 配置局域网 git server 最近要用 C# 开发一个新的项目,所以需要在 Windows 局域网环境下构建一个 git server. 在 Window ...

  9. WebApi 找到了与该请求匹配的多个操作

    在同一个命名空间内,报错 错误的路由代码: namespace CRM4S { public static class WebApiConfig { public static void Regist ...

  10. HTMLCanvasElement.toDataURL()

    HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI .可以使用 type 参数其类型,默认为 PNG 格式.图片的分辨率为96dpi. 如果画布的 ...