6

私はCMakeOpenGLでまったく新しいです。CMake 3.0.2でビルドされた Ubuntu 15.04 64 ビット PC 上のプロジェクトでOpenGLをライブラリとして使用する必要があります。

私はこれに数日間取り組んできましたが、ほとんどイライラしています。いろいろな問題で混乱します。


メサと OpenGL

まず、mesaパッケージを commandでインストールすると、 mesa 10.5.2sudo apt-get install mesa-common-devが取得されます。

次に、次のコマンドでパッケージ ファイルを参照しますdpkg -L mesa-common-dev

/.
/usr
/usr/share
/usr/share/bug
...
/usr/share/bug/mesa-common-dev/control

/usr/share/doc
...
/usr/share/doc/mesa-common-dev/faq.html

/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/dri.pc

/usr/include
/usr/include/GL
/usr/include/GL/gl.h
...
/usr/include/GL/glx_mangle.h

質問 1 : 共有ライブラリ (.so) と静的ライブラリ (.a) はどこにありますか?


CMake

私は今CMakeLists.txt、OpenGL モジュールという名前の を持っていますOPENGL

...
find_package(OPENGL REQUIRED)  # here is CMakeLists.txt:45
...
include_directories(${OPENGL_INCLUDE_DIRS})
link_directories(${OPENGL_LIBRARY_DIRS})
target_link_libraries(MyProj ... ${OPENGL_LIBRARIES})
...

だから私は間違いなくこのようなcmakeファイルを持っている必要があります(テンプレートとしてのcmakeファイルをFindOPENGL.cmake取りました):GLEW

# OPENGL_FOUND             If OPENGL is found
# OPENGL_LIBRARIES         OPENGL libraries
# OPENGL_INCLUDE_DIRS      OPENGL include directories
# OPENGL_LIBRARY_DIRS      OPENGL library directories

if(UNIX)
  set(OPENGL_INC_NAMES gl.h)
  set(OPENGL_LIB_NAMES libGL.so.1.2.0)
endif(UNIX)

# OPENGL static library     # line 17
find_library(OPENGL_LIBRARIES
    NAMES ${OPENGL_LIB_NAMES}
    PATHS /usr/x86_64-linux-gnu/mesa
    DOC "OPENGL library")

# OPENGL library dir        # line 23
find_path(OPENGL_LIBRARY_DIRS
    NAMES ${OPENGL_LIB_NAMES}
    PATHS /usr/x86_64-linux-gnu/mesa
    DOC "OPENGL include directories")

# OPENGL include dir        # line 29
find_path(OPENGL_INCLUDE_DIRS
    NAMES ${OPENGL_INC_NAMES}
    PATHS /usr/include/GL
    DOC "OPENGL include directories")

# Version
set(OPENGL_VERSION 1.13.0)

# Set package standard args
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OPENGL       # here is FindOPENGL.cmake:40
    REQUIRED_VARS OPENGL_LIBRARIES OPENGL_INCLUDE_DIRS OPENGL_LIBRARY_DIRS
    VERSION_VAR OPENGL_VERSION)

質問 2 : cmake ファイルで静的ライブラリと共有ライブラリをリンクする方法と、17/23/29 行の違いは何ですか?

次に、cmake を実行すると、次のエラーが発生します。

CMake Error at /usr/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:136 (message):
  Cound NOT find OPENGL (missing: OPENGL_LIBRARIES OPENGL_LIBRARY_DIRS)
  (found version "1.13.0")
Call Stack (most recent call first):
  /usr/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:343 (_FPHSA_FAILURE_MESSAGE)
  cmake/modules/FindOPENGL.cmake:40 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:45 (find_package)

質問 3 : このエラーが表示されるのはなぜですか?どうすれば修正できますか? 手順全体で何か間違ったことをしましたか?


アップデート

@ usr1234567 の回答に感謝します。その後、削除して/usr/share/cmake-3.0/Modules/FindOpenGL.cmakeFindOPENGL.cmakeを利用しようとします。それでもエラーが発生します。の定義についてこの cmake ファイルを調べ、その中の lib パスを手動で確認しましたが、残念ながらリストされているパスは存在しません。missing: OPENGL_gl_LIBRARYOPENGL_gl_LIBRARY

mesaを正しくインストールしましたか?

4

2 に答える 2

4
  • CMake FindOpenGL を使用します。 https://cmake.org/cmake/help/v3.0/module/FindOpenGL.htmlを参照してください。

  • 17 行目と 23 行目の違いは、ライブラリ (17 行目の find_library) とヘッダー (23 行目の find_path) を探していることです。23 行目と 29 行目では、2 つの異なる場所で gl.h を探します。全体として、これは重要ではありません。CMake が検索ルーチンを提供しているため、独自の検索ルーチンを作成する必要があるからです。

  • 静的ライブラリと共有ライブラリを見つけることができます。デフォルトでは、.so を取得します。2 回目の実行 / 変数については、「最初にアーカイブ名を尋ねてください: find_library(MYLIB NAMES libmylib.a mylib)https://cmake.org/pipermail/cmake/2010-December/041326.htmlから

  • 質問 3 は、CMake にどこを見ればよいかを示唆することで解決できます。これは、正しいパスを CMAKE_PREFIX_PATH に追加することで実行できます。あなたの場合、CMake から FindOpenGL を使用すると見つかるはずです。

于 2015-11-30T16:43:07.320 に答える