2

タイトルには、問題の説明が記載されています。 libwebsocket ライブラリを使用して CMake プロジェクトを作成しようとしていますが、そのための情報が見つかりません。

これを試した人はいますか?たとえば、テスト サーバー プログラム用の単純な CMakeLists.txt は大歓迎です。

ライブラリをコンパイルして、Ubuntu 14.04 マシンにインストールしました。

編集: C++でlibwebsocket libを使用した経験があるかどうかも知りたいですか?

編集 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:

/etc/ld.so.confedit 2 を解決: ファイルを編集して/usr/local/lib.

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

4

1 に答える 1

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;にインストールした場合は、そのままで問題なく動作するはずです。ただし、別の場所にインストールした場合は、を呼び出した環境で設定PKG_CONFIG_PATHcmakeする必要があります。

また、CMake のドキュメントで説明されているように、 CMake 2.8.11 以前を使用している場合は、呼び出しDIRECTORYでを置き換える必要があります。PATHget_filename_component()

更新: フォローアップ コメントからのファイルが見つからないというエラーに関しては、これはほぼ確実libwebsocket.so[.7]に、リンカーの既定のパスにないことが原因です。これを修正するには少なくとも 3 つの方法がありますが、これが問題であることを確認する最も簡単な方法は、以下を使用して端末からアプリを起動することです。

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

それが機能する場合、それが問題であることがわかります。(おっと—それまでに理解したようです。ええ、更新は別の方法です。または、[この回答で説明されているように] の静的バージョン/etc/ld.so.confにリンクするように CMake を強制することもできます。しかし、私はあなたの解決策が好きです一番。)libwebsockets

UPDATE : 言及されていないことの 1 つ/etc/ld.so.confは、通常sudo /sbin/ldconfig、共有ライブラリ キャッシュを更新するために編集後に実行する必要があることです。また、特定のアプリケーションにデフォルト以外のパスを設定する場合、多くの人/etc/ld.so.conf.dは、グローバルな ldconfig ファイルを編集するよりも、新しい「サブ構成ファイル」を追加する方がよいと考えています。(ただし、追加の場合/usr/local/lib、これは非常に一般的な要件であるため、グローバル構成にダンプする傾向があります。これは、とにかく多くのLinuxディストリビューションが行うことです。)

于 2016-03-07T16:02:49.123 に答える