终端编译opengl程序编译运行_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

#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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值