Создание проекта CMake для libwebsocket

В заголовке указано условие проблемы: я пытаюсь создать проект CMake, используя библиотеку libwebsocket, но Я не могу найти никакой информации для этого.

Есть ли кто-нибудь, кто пробовал это? Простой CMakeLists.txt, например. программа тестового сервера будет высоко оценена!

Я скомпилировал и установил библиотеку на свой компьютер с Ubuntu 14.04.

EDIT: Я также хотел бы знать, есть ли у кого-нибудь опыт использования libwebsocket lib с C++?

EDIT 2: После использования ответа @evadeflow я могу запустить cmake и собрать проект. Однако теперь я получаю следующую ошибку времени выполнения:

введите здесь описание изображения

А вот ls папки /usr/local/lib/

введите здесь описание изображения

Вроде файл 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/


person Nicolai Anton Lynnerup    schedule 07.03.2016    source источник


Ответы (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"
)

По сути, это урезанная версия того, что находится в CMakeLists.txt из проекта libwebsockets github без всех условий, специфичных для платформы и сборки.

Надеюсь, этого достаточно, чтобы удовлетворить ваш запрос на "простой" CMakeLists.txt пример. Я тестировал его с CMake версии 2.8.12.2; он должен нормально работать как есть, если вы установили libwebsockets с префиксом по умолчанию /usr/local; однако, если вы установили в другое место, вам нужно будет установить PKG_CONFIG_PATH в среда, из которой вы вызываете cmake.

Кроме того, как объясняется в документации по CMake, вам потребуется чтобы заменить DIRECTORY на PATH в вызове get_filename_component(), если вы используете CMake 2.8.11 или более ранней версии.

ОБНОВЛЕНИЕ. Что касается ошибки «файл не найден» из вашего последующего комментария, это почти наверняка связано с тем, что libwebsocket.so[.7] не указан в пути компоновщика по умолчанию. Есть как минимум три способа исправить это, но самый простой способ убедиться, что это проблема, — просто запустить приложение из терминала, используя:

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

Если это работает, вы знаете, что это была проблема. (К сожалению, я вижу, вы уже поняли это. Да, обновить /etc/ld.so.conf — это еще один способ. Или вы можете заставить CMake ссылаться на статическую версию libwebsockets [как описано в этот ответ]другой. Но мне больше нравится ваше решение.)

ОБНОВЛЕНИЕ. В отношении /etc/ld.so.conf не упоминается одна вещь: вам обычно нужно запускать sudo /sbin/ldconfig после его редактирования, чтобы обновить кеш общей библиотеки. И — при установке нестандартных путей для конкретного приложения — многие люди считают хорошим тоном добавить новый «вложенный файл конфигурации» в /etc/ld.so.conf.d, а не редактировать глобальный файл ldconfig. (Однако в случае добавления /usr/local/lib это настолько распространенное требование, что я был бы склонен сбросить его в глобальную конфигурацию, что, во всяком случае, делают многие дистрибутивы Linux.)

person evadeflow    schedule 07.03.2016
comment
это работает отлично! Спасибо. Однако теперь я натыкаюсь на ошибку времени выполнения, см. Мое редактирование выше. - person Nicolai Anton Lynnerup; 07.03.2016
comment
Пожалуйста, не обращайте на это внимания, я решил это и добавил решение к моему вопросу :) еще раз, спасибо! - person Nicolai Anton Lynnerup; 07.03.2016