You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04下CMake编译libevent代码遇timerclear未定义引用问题

解决CMake编译libevent定时器代码时timerclear未定义引用问题

问题原因

直接用gcc main.c -levent_core能编译通过,但CMake构建失败,核心原因是:

  • CMake手动指定库名时,不会自动解析libevent依赖的系统库(如rt、pthread),而gcc的链接器会自动处理这些隐式依赖;
  • 若CMake未显式定义_GNU_SOURCE宏,可能导致timerclear这类GNU扩展函数的声明未被正确引入。

解决方案

方案1:使用CMake的find_package规范引入libevent

这是最可靠的方式,CMake会自动处理所有依赖(包括系统库)。修改你的CMakeLists.txt为:

cmake_minimum_required(VERSION 3.16)
project(timer_demo C)

set(CMAKE_C_STANDARD 11)

# 查找libevent库,需确保libevent安装时生成了CMake配置文件
find_package(Libevent REQUIRED)

add_executable(main main.c)

# 链接libevent的core和extra组件
target_link_libraries(main PRIVATE Libevent::core Libevent::extra)

方案2:手动补充系统依赖库

如果不想用find_package,可以在原有CMake配置中添加系统库链接:

cmake_minimum_required(VERSION 3.16)
project(timer_demo C)

set(CMAKE_C_STANDARD 11)

add_executable(main main.c)

# 显式链接libevent库及依赖的系统库
target_link_libraries(main event_core event_extra rt pthread)

方案3:确保_GNU_SOURCE宏被定义

如果代码中未显式定义_GNU_SOURCE,可以在CMake中添加编译选项:

add_definitions(-D_GNU_SOURCE)

或者在main.c开头添加:

#define _GNU_SOURCE
#include <time.h>
#include <event2/event.h>

验证步骤

修改后重新构建:

rm -rf build && mkdir build && cd build && cmake .. && make

内容的提问来源于stack exchange,提问作者jizhihong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:48:20