• Linux下OpenGL的安装与cmake编译OpenGL程序


    {

    OpenGL安装

    安装命令如下:

    $ sudo apt install build-essential
    $ sudo apt install libgl1-mesa-dev
    $ sudo apt install libglu1-mesa-dev
    $ sudo apt install freeglut3 freeglut3-dev

        1
        2
        3
        4

    cmake编译OpenGL程序

    project
    ├── MeshLib
    │   └── core
    │        └── bmp
    │             └── RgbImage.cpp
    ├── MyDemo
    │   ├── main.cpp
    │   ├── CMakeLists.txt
    │   └── build


        1
        2
        3
        4
        5
        6
        7
        8
        9
        10

    其他头文件的路径直接在.cpp里体现出来,如:
    在main.cpp中:

      #include <GL/glut.h>
        #include "../MeshLib/core/viewer/Arcball.h"      
        #include "../MeshLib/core/bmp/RgbImage.h"
        #include "../MeshLib/core/Geometry/quat.h"

        1
        2
        3
        4

    否则,如果直接写 #include “Arcball.h” 之类的,就需要在CMakeLists.txt中包含所有头文件路径(如glut.h就需要指定路径 OpenGL_INCLUDE_DIR)
    若使用freeglut的话

    MyDemo/CMakeLists.txt

    cmake_minimum_required(VERSION 2.6)
        add_compile_options(-std=c++11)
        set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/build/CMakeModules/")

        project(MyDemo)

        find_package(OpenGL REQUIRED)
        include_directories(${OpenGL_INCLUDE_DIR})

        find_package(FREEGLUT REQUIRED)
        include_directories(${FREEGLUT_INCLUDE_DIR})

        add_executable(${PROJECT_NAME} ${PROJECT_BINARY_DIR}/../../MeshLib/core/bmp/RgbImage.cpp main.cpp )

        target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARY} ${FREEGLUT_LIBRARY} ${OPENGL_LIBRARY})

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15

    但是光这样还是没办法的,因为找不到freeglut库,这时候需要再写一个搜索package frerglut的CMakeLitsts.txt
    在build目录下mkdir一个CMakeModules, 新建一个文件名FindFREEGLUT.cmake的文件,编辑内容如下(为什么是在build目录下新建而不是在MyDemo目录下?因为我们是进入build中,执行命令”cmake ..“的)

    # Try to find the FREEGLUT library
        #
        # FREEGLUT_INCLUDE_DIR
        # FREEGLUT_LIBRARY
        # FREEGLUT_FOUND

        FIND_PATH(
          FREEGLUT_INCLUDE_DIR GL/freeglut.h GL/gl.h GL/glu.h GL/glew.h
          ${CMAKE_INCLUDE_PATH}
          $ENV{include}
          ${OPENGL_INCLUDE_DIR}
          /usr/include
          /usr/local/include
        )

        SET(STORE_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
        SET(CMAKE_FIND_FRAMEWORK NEVER)

        FIND_LIBRARY(
          FREEGLUT_LIBRARY
          NAMES freeglut_static freeglut glut GL
          PATH
            /opt/local/lib
            ${CMAKE_LIBRARY_PATH}
            $ENV{lib}
            /usr/lib
            /usr/local/lib
        )

        SET(CMAKE_FIND_FRAMEWORK ${STORE_CMAKE_FIND_FRAMEWORK})

        IF (FREEGLUT_INCLUDE_DIR AND FREEGLUT_LIBRARY)
           SET(FREEGLUT_FOUND TRUE)
        ENDIF (FREEGLUT_INCLUDE_DIR AND FREEGLUT_LIBRARY)

        IF (FREEGLUT_FOUND)
           IF (NOT FREEGLUT_FIND_QUIETLY)
              MESSAGE(STATUS "Found FREEGLUT: ${FREEGLUT_LIBRARY}")
           ENDIF (NOT FREEGLUT_FIND_QUIETLY)
        ELSE (FREEGLUT_FOUND)
           IF (FREEGLUT_FIND_REQUIRED)
              MESSAGE(FATAL_ERROR "Could not find FREEGLUT")
           ENDIF (FREEGLUT_FIND_REQUIRED)
        ENDIF (FREEGLUT_FOUND)

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44

    若使用glut的话

    则则比较简单:

    cmake_minimum_required (VERSION 2.6)  

        project(OpenGL)  

        find_package(OpenGL REQUIRED)  
        include_directories(${OPENGL_INCLUDE_DIR})  

        find_package(GLUT REQUIRED)  
        include_directories(${GLUT_INCLUDE_DIR})  

        set(CMAKE_CXX_FLAGS "-g -Wall")  

        add_executable(OpenGL Main.cpp)  
        target_link_libraries(OpenGL ${GLUT_LIBRARY} ${OPENGL_LIBRARY})

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14

    可能出现的错误

        if you use `-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated

        解决方法 add_compile_options(-fpermissive -std=c++11)

        undefined reference to symbol …
        这类错误通常是链接.so, .a文件失败产生的,但是都会给出具体是哪个lib没有:”/lib/x86_64-linux-gnu/libz.so: error adding symbols: DSO missing from command line”
        解决方法,
        1.用各种方法把libz.so放到指定目录下(方法太多了自行查询)
        2.若目录下已有libz.so,则在target_link_libraries中加上该libz.so( ${PROJECT_SOURCE_DIR}//libz.so)
    ————————————————
    版权声明:本文为CSDN博主「SarKerson」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/sarkerson/java/article/details/78068417

    }

  • 相关阅读:
    __name__在调用时的区别
    Python内置模块--os模块的使用
    查询mysql 表的元数据信息
    nfs服务搭建
    jvm参数设置
    spring boot 集成 beetl
    spring boot 集成 swagger2 四部曲
    JavaScript中的this关键字
    jQuery 基础事件
    jQuery 表单选择器
  • 原文地址:https://www.cnblogs.com/YZFHKMS-X/p/13028276.html
Copyright © 2020-2023  润新知