如何使用CMake在Ubuntu中查找和链接OpenGL(mesa)包
我对CMake和OpenGL完全陌生。我现在需要在我的Ubuntu 15.04 64位PC上使用OpenGL作为我的项目库,该PC由CMake 3.0.2构建 我已经为此工作了好几天,几乎感到沮丧。我被一大堆问题弄糊涂了如何使用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
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,应该可以找到它
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