推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

libevent的链接顺序源文件在前库在后.docx

更新时间:2026-10-09 20:33:02 大小:37K 上传用户:江岚查看TA发布的资源 标签:libevent链接顺序undefined referenceGNU ld符号解析 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

libevent 的链接顺序:源文件在前,库在后

一个隐蔽的链接坑

用 libevent 写程序,编译链接时有一个特别容易踩的坑:链接器报 undefined reference,但明明加了 -levent。问题的根源,是链接参数的顺序。

这篇文章讲 libevent 链接顺序的坑,以及为什么"源文件在前、库在后"。

链接器的处理顺序

GNU ld(链接器)处理库和对象文件的顺序,是从左往右。

当链接器处理一个库文件时,它会记录库里定义了哪些符号,但只解析"已经被引用的"未定义符号。

如果库文件出现在源文件之前,链接器处理库时还不知道源文件需要哪些符号,等处理源文件产生未定义引用时,链接器不会回头再处理库。

所以,库文件必须在源文件之后,链接器才能解析符号。

错误的顺序

看一个错误示例。

gcc -levent test.c -o test

这里 -levent 在 test.c 前面。链接器先处理 libevent,但此时还没有 test.c 产生的未定义引用,所以 libevent 里的函数没有被"拉入"。等处理 test.c 时,产生对 event_base_new 等的未定义引用,但链接器不会回头再找 libevent。

结果就是 undefined reference。


部分文件列表

文件名 大小
libevent的链接顺序源文件在前库在后.docx 37K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载