Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用CMake在Ubuntu中查找和链接OpenGL(mesa)包_Opengl_Cmake_Mesa - Fatal编程技术网

如何使用CMake在Ubuntu中查找和链接OpenGL(mesa)包

如何使用CMake在Ubuntu中查找和链接OpenGL(mesa)包,opengl,cmake,mesa,Opengl,Cmake,Mesa,我对CMake和OpenGL完全陌生。我现在需要在我的Ubuntu 15.04 64位PC上使用OpenGL作为我的项目库,该PC由CMake 3.0.2构建 我已经为此工作了好几天,几乎感到沮丧。我被一大堆问题弄糊涂了 mesa与OpenGL 首先,我使用命令sudoapt-get-install-mesa-common-dev安装了mesa包,该命令为我提供了mesa 10.5.2 然后我用dpkg-L mesa common dev浏览包文件: /. /usr /usr/share /u

我对CMake和OpenGL完全陌生。我现在需要在我的Ubuntu 15.04 64位PC上使用OpenGL作为我的项目库,该PC由CMake 3.0.2构建

我已经为此工作了好几天,几乎感到沮丧。我被一大堆问题弄糊涂了


mesa与OpenGL 首先,我使用命令
sudoapt-get-install-mesa-common-dev
安装了mesa包,该命令为我提供了mesa 10.5.2

然后我用
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)在哪里


克马克 我现在有了一个
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文件,比如说
FindOPENGL.cmake
,就像这样(以
GLEW
的cmake文件为模板):

问题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的回答,然后我删除了我的
FindOPENGL.cmake
,并尝试利用它。我仍然得到错误
丢失:OPENGL\u gl\u库
。我在这个cmake文件中查找
OPENGL\u库
的定义,并手动检查其中的库路径,不幸的是,列出的路径都不存在

我是否正确安装了mesa?

  • 使用CMake FindOpenGL,请参阅

  • 第17行和第23行之间的区别在于您查找库(第17行中的find_library)和头(第23行中的find_path)。在第23行和第29行中,您在两个不同的位置查找gl.h。总的来说,这并不重要,因为您应该编写自己的查找例程,因为CMake为您提供了一个查找例程

  • 您可以找到静态库和共享库。默认情况下,您将获得。对于第二次运行/变量“只需首先请求存档名称:
    find_library(MYLIB NAMES libmylib.a MYLIB)
    ”来自

  • 问题3可以通过暗示CMake去哪里寻找来解决。这可以通过向CMAKE_PREFIX_path添加正确的路径来实现。在您的情况下,如果您使用来自CMake的FindOpenGL,应该可以找到它


如上所述,使用cmake提供的内置
FindOpenGL.cmake

您缺少
libgl1 mesa dev
。因此,请尝试以下方法:

sudo apt install mesa-common-dev libgl1-mesa-dev
或者,如果希望通过
FindOpenGL.cmake
找到EGL:

sudo apt install mesa-common-dev libgl1-mesa-dev libgles2-mesa-dev

谢谢你的回答。顺便问一下,find_path用于.h而find_library用于.a,cmake如何处理共享库。soI然后使用cmake中的
FindOpenGL.cmake
,仍然有错误
缺失:OpenGL_gl_library
,我在我的
CMakeLists.txt
中打印
OPENGL\u FOUND OPENGL\u XMESA\u FOUND OPENGL\u GLU FOUND OPENGL\u INCLUDE\u DIR OPENGL\u LIBRARIES OPENGL\u gl\u LIBRARY
,除了
OPENGL\u FOUND=FALSE
之外,这些变量都没有定义。我怎样才能正确使用OpenGL?试着安装freeglut3 dev,这应该会为OpenGL依赖项提供所有必需的软件包。@usr1234567我必须使用freeglut3之外的其他库,无论如何,你的评论给了我很多启发,问题是我没有获得所有必需的软件包。@usr1234567不幸的是,发生了其他链接错误…所以CMake不再发出您在问题中的警告?然后接受我的答案,也许再贴一个新的。当前的问题已经非常具体,对其他许多人没有帮助。安装了所有这些软件包后,我可以正确地使用cmake生成Makefile:mesa common dev mesa utils extra libgl1 mesa dev libglu1 mesa dev libglapi mesa libx11 dev libxi dev libxinerama dev libxceror dev libxrandr dev
sudo apt install mesa-common-dev libgl1-mesa-dev libgles2-mesa-dev