linux在eclipse下编译并单步调试libevent

https://blog.csdn.net/qyyouming/article/details/64131364

 

折腾这么久终于有所收获了,libevent是跨平台的,他的代码是适应所有平台,而eclipse编译是根据文件扩展名进行的,所以很多在windows平台下的源代码文件eclipse也会尝试去编译,结果自然通不过,还有就是即使是在linux平台下,由于linux版本很多,各个版本支持的东西也不全相同,例如我的Centos 6.5就没有devpoll,所以编译时也不行。使用libevent的configure自动话编译工具时会检查系统相关信息,所以很多.c的源代码在Makefile文件里并没有进行编译,还有一个就是Makefile里会等于这个编译标志DEFS = -DHAVE_CONFIG_H,这个控制在编译时是否包含event-config.h等相关头文件,里面又是各种宏定义,我们先使用自动编译工具进行编译,命令为在libevent目录下执行./configure --prefix=/usr/local/libevent && make,注意make时的输出信息,它指示当前编译了哪些.c文件,也可以在Makefile文件的 c.lo: 的这个lable里加上编译的文件,并重定向输出的自己的文件,便于查看,如下所示

809 .c.lo:

810 $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<

811 $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo

812 echo "$<" >> /tmp/compile_src

其中 echo "$<" >> /tmp/compile_src就是我加的,便于后期确定需要编译的源文件。

执行./configure --prefix=/usr/local/libevent && make成功之后会编译好libevent的库文件,还会生成event-config.h, evconfig-private.h等头文件,这些都是后期在eclipse下编译所需要的,当然这时你也可以执行make install安装libevent库。libevent里面的test和sample是测试用例代码的文件夹里面很多包含main函数的.c文件,这里我们不要,还有WIN32-Code文件夹是windows平台下的源文件,linux下也不要,必须将这三个文件夹移出eclipse项目文件夹,否则编译会报错。


到此,前期的准备工作大致完成了,接下来就是要筛选所需编译的源文件,在我的系统下这些文件是不要的

sample/ test/ WIN32-Code/ (三个文件夹)

buffer_iocp.c 、epoll_sub.c、 evthread_win32.c、 win32select.c 、event_iocp.c、 bufferevent_async.c 、kqueue.c

编译时记得在eclipse里定义HAVE_CONFIG_H这个宏,

编译时会发现evutil_rand.c文件里有一句#include "./arc4random.c"的代码,表示需要包含arc4random.c,这不符合C语言规范,在eclipse里会尝试编译arc4random.c文件,结果会报错,这里把arc4random.c重命名为arc4random.h,并修改那句代码为#include "./arc4random.h",继续编译,后面会提示openssl等相关依赖库的符号找不到,加上ssl、crypto、rt、pthread动态链接库,编译到最后会提示找不到__start的符号,这是因为我建立的是Excutable项目(可执行文件项目),但代码中没有定义main函数入口,这时在项目里添加一个main.c的源文件,里面加上main函数就好,

#include<stdio.h>

int main()

{

return 0;

}

再次编译成功通过,这时我们就可以把test或sample里的文件拿来编译了,单步调试查看libevent的具体执行过程。

找了很多资料都说在VS下编译libevent很容易,原来是libevent有Makefile.nmake的文件,这里是用来在windows平台下编译的
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值