【问题标题】:event.h: No such file or directory even when libevent-dev is installedevent.h:即使安装了 libevent-dev,也没有这样的文件或目录
【发布时间】:2019-11-07 04:19:48
【问题描述】:

我正在尝试编译一个依赖于 libevent 的库。该库是使用具有顶级 CMakeLists.txt 文件的 cmake 构建系统的更大项目的一部分。

库目录中的 CMakelists.txt 文件包含

target_include_directories(<library name> PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${SOME_DEP_DIR}/include)
target_link_libraries(<library name> PUBLIC event)

libevent 似乎存在于系统上 -

$ ldconfig -p | grep event
    libtevent.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libtevent.so.0
    libtevent-util.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libtevent-util.so.0
    libevent_pthreads-2.1.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libevent_pthreads-2.1.so.6
    libevent_openssl-2.1.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libevent_openssl-2.1.so.6
    libevent_extra-2.1.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libevent_extra-2.1.so.6
    libevent_core-2.1.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libevent_core-2.1.so.6
    libevent-2.1.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libevent-2.1.so.6

event.h 也是如此

$ ls -l /usr/include/event.h 
-rw-r--r-- 1 root root 2744 Feb  5  2018 /usr/include/event.h

我还安装了 libevent-dev -

$ dpkg -l | grep libevent-dev
ii  libevent-dev                               2.1.8-stable-4build1                         amd64        Asynchronous event notification library (development files)

我不知道为什么当我运行 make library 时,我收到以下错误 -

fatal error: event.h: No such file or directory
 #include <event.h>

任何建议都会有所帮助。谢谢!

【问题讨论】:

    标签: linux gcc cmake header-files


    【解决方案1】:

    您需要将路径 /usr/include 添加到包含目录的列表中。

    target_include_directories(<library name> PRIVATE /usr/include ${CMAKE_CURRENT_SOURCE_DIR} ${SOME_DEP_DIR}/include)
    

    更新:更好的方法是使用 cmake 的 pkg-config 模块来查找提供 pkg-config 的 .pc 文件的库。

    # Add pkg-config functionality
    find_package(PkgConfig REQUIRED) 
    
    # search for libevent.pc
    pkg_search_module(EVENT REQUIRED libevent)
    
    target_include_directories(<library name> PRIVATE ${EVENT_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ${SOME_DEP_DIR}/include)
    target_link_libraries(<library name> PUBLIC ${EVENT_LIBRARIES})
    

    libevent.pc 包含成功链接库 libevent 所需的所有必要信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-15
      • 2022-01-26
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多