【问题标题】:Creating CMake project for libwebsocket为 libwebsocket 创建 CMake 项目
【发布时间】:2016-03-07 13:54:09
【问题描述】:

标题说明了问题陈述:我正在尝试使用libwebsocket library 创建一个 CMake 项目,但我找不到任何相关信息。

有人试过吗?一个简单的 CMakeLists.txt,例如测试服务器程序将不胜感激!

我已经在我的 Ubuntu 14.04 机器上编译并安装了该库。

编辑:我还想知道是否有人有使用带有 C++ 的 libwebsocket 库的经验?

编辑 2: 使用@evadeflow 的答案后,我可以运行 cmake 并构建项目。但是现在我收到以下运行时错误:

这是/usr/local/lib/ 文件夹的ls

libwebsockets.so.7 文件好像没有找到?

来自 CMake:

  • ${LIB_WEBSOCKETS_INCLUDE_DIRS} = /usr/local/lib
  • ${LIB_WEBSOCKETS_INSTALL_DIR} = /usr/local

编辑 3:

通过以下方式解决了编辑 2: 编辑文件/etc/ld.so.conf并添加/usr/local/lib

参考:https://lonesysadmin.net/2013/02/22/error-while-loading-shared-libraries-cannot-open-shared-object-file/

【问题讨论】:

    标签: c cmake libwebsockets


    【解决方案1】:

    如果你已经安装了libwebsockets,这样的东西应该可以工作:

    cmake_minimum_required(VERSION 2.8)
    
    find_package(PkgConfig)
    pkg_check_modules(LIB_WEBSOCKETS REQUIRED libwebsockets)
    
    get_filename_component(
      LIB_WEBSOCKETS_INSTALL_DIR
      ${LIB_WEBSOCKETS_LIBRARY_DIRS}
      DIRECTORY
    )
    
    add_executable(
        test-server
          test-server/test-server.c
          test-server/test-server-http.c
          test-server/test-server-dumb-increment.c
          test-server/test-server-mirror.c
          test-server/test-server-status.c
          test-server/test-server-echogen.c
    )
    
    target_link_libraries(
        test-server
          ${LIB_WEBSOCKETS_LIBRARIES}
    )
    
    set_target_properties(
        test-server
        PROPERTIES
          INCLUDE_DIRECTORIES
            ${LIB_WEBSOCKETS_INCLUDE_DIRS}
          LINK_FLAGS
            "-L${LIB_WEBSOCKETS_LIBRARY_DIRS}"
          COMPILE_DEFINITIONS
            INSTALL_DATADIR="${LIB_WEBSOCKETS_INSTALL_DIR}/share"
    )
    

    这基本上是 libwebsockets github 项目中 CMakeLists.txt 文件中内容的精简版本,没有所有平台和构建特定的条件。

    我希望这足以满足您对“简单”CMakeLists.txt 示例的要求。我用 CMake 版本 2.8.12.2 对其进行了测试;如果您已将 libwebsockets 安装到其默认前缀 /usr/local,它应该可以正常工作;但是,如果您安装到其他位置,则需要在调用 cmake 的环境中使用 set PKG_CONFIG_PATH

    此外,如 CMake documentation 中所述,如果您使用的是 CMake 2.8.11 或更早版本,则需要在 get_filename_component() 调用中将 DIRECTORY 替换为 PATH

    更新:关于您后续评论中的文件未找到错误,这几乎可以肯定是因为libwebsocket.so[.7] 不在链接器的默认路径上。至少有三种方法可以解决此问题,但验证问题是否存在的最简单方法是使用以下命令从终端启动应用程序:

    $ LD_LIBRARY_PATH=/usr/local/lib ./test-server
    

    如果它有效,您就知道这是问题所在。 (糟糕——我看到你在此期间已经弄清楚了。是的,更新 /etc/ld.so.conf 是另一种方式。或者,你可以强制 CMake 链接到 static 版本的 libwebsockets [as this answer] 中描述的是另一个。但我最喜欢你的解决方案。)

    更新:关于/etc/ld.so.conf 没有提及的一件事是,您通常需要在编辑后运行sudo /sbin/ldconfig 以更新共享库缓存。而且——在为特定应用程序设置非默认路径时——许多人认为在/etc/ld.so.conf.d 中添加新的“子配置文件”而不是编辑全局ldconfig 文件是一种很好的形式。 (不过,对于添加 /usr/local/lib 的情况,这是一个非常常见的要求,我倾向于将其转储到全局配置中,无论如何,这是许多 Linux 发行版所做的。)

    【讨论】:

    • 这完美!谢谢你。然而,我现在偶然发现了一个运行时错误,请参阅上面的编辑。
    • 请忽略这一点,我解决了它并将解决方案附加到我的问题:) 再次谢谢!
    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2017-06-09
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多