日期:2014-05-16  浏览次数:20695 次

关于epoll的链接库
大家好,我把Redhat9.0的内核从2.4.2升级到2.6.2之后,编译一个关于epoll的程序,在链接的时候发现了错误:
main.c:114:对‘epoll_create’未定义的引用
main.c:119:对‘epoll_ctl’未定义的引用
main.c:132:对‘epoll_wait’未定义的引用
main.c:158:对‘epoll_ctl’未定义的引用
main.c:171:对‘epoll_ctl’未定义的引用
  
  请问这个问题是由于哪方面原因引起的?缺乏链接库,还是在升级内核出现问题?

请大家指点一下,谢谢!

------解决方案--------------------
glibc库不支持?
------解决方案--------------------
链接的时候提示未定义引用,说明程序所链的库没有epoll这几个接口。
epoll除了内核支持外,还需要系统库也支持的,除非直接通过系统调用。

在一个比较老的机器上,grep了一下c库,没有返回结果,说明c库不支持epoll
[test@test lib]$ grep epoll_create libc-2.3.2.so 
[test@test lib]$ ls -lh libc-2.3.2.so 
-rwxr-xr-x 1 root root 1.5M Mar 14 2003 libc-2.3.2.so
[test@test lib]$ grep epoll_create libc-2.3.2.so
[test@test lib]$

在我一个较新的机器上,同样grep了一下,提示matches,说明这个C库支持epoll
bash-2.05b# ls -lh libc-2.5.so 
-rwxr-xr-x 1 root root 1.5M Mar 16 2010 libc-2.5.so
bash-2.05b# 
bash-2.05b# grep epoll_create libc-2.5.so 
Binary file libc-2.5.so matches
bash-2.05b#