为libwebsocket创建CMake项目

时间:2016-03-07 13:54:09

标签: c cmake libwebsockets

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

有没有人试过这个?一个简单的CMakeLists.txt,例如非常感谢测试服务器程序!

我已经在我的Ubuntu 14.04计算机上编译和安装了该库。

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

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

enter image description here

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

enter image description here

似乎找不到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/

1 个答案:

答案 0 :(得分:4)

如果你已经安装了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或更早版本,则需要在DIRECTORY调用中将PATH替换为get_filename_component()

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

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

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

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