No OpenGL 3 headers in Arch Linux
Asked Answered
W

2

5

I’m trying to compile a very simple “Hello world” OpenGL 3.3 program using FreeGLUT. In all the tutorials I found, they include an header “gl3.h”. The problem is, I don’t have such header file.

$ ls -l /usr/include/GL/
total 2164
-rw-r--r-- 1 root root   8797 20 janv. 17:44 freeglut_ext.h
-rw-r--r-- 1 root root    681 20 janv. 17:44 freeglut.h
-rw-r--r-- 1 root root  26181 20 janv. 17:44 freeglut_std.h
-rw-r--r-- 1 root root 837247 27 janv. 12:55 glew.h
-rw-r--r-- 1 root root 656589 21 mars  18:07 glext.h
-rw-r--r-- 1 root root  84468 21 mars  18:07 gl.h
-rw-r--r-- 1 root root 128943 21 mars  18:07 gl_mangle.h
-rw-r--r-- 1 root root  17255 21 mars  18:07 glu.h
-rw-r--r-- 1 root root   3315 21 mars  18:07 glu_mangle.h
-rw-r--r-- 1 root root    639 20 janv. 17:44 glut.h
-rw-r--r-- 1 root root  62741 27 janv. 12:55 glxew.h
-rw-r--r-- 1 root root  43887 21 mars  18:07 glxext.h
-rw-r--r-- 1 root root  17170 21 mars  18:07 glx.h
-rw-r--r-- 1 root root   4706  3 févr. 13:33 glxint.h
-rw-r--r-- 1 root root   3463 21 mars  18:07 glx_mangle.h
-rw-r--r-- 1 root root   2086  3 févr. 13:33 glxmd.h
-rw-r--r-- 1 root root  80979  3 févr. 13:33 glxproto.h
-rw-r--r-- 1 root root  11246  3 févr. 13:33 glxtokens.h
drwxr-xr-x 2 root root   4096 14 avril 14:03 internal
-rw-r--r-- 1 root root   8497 21 mars  18:07 osmesa.h
-rw-r--r-- 1 root root  51274 21 mars  18:07 vms_x_fix.h
-rw-r--r-- 1 root root  59403 27 janv. 12:55 wglew.h
-rw-r--r-- 1 root root  41377 21 mars  18:07 wglext.h
-rw-r--r-- 1 root root   4468 21 mars  18:07 wmesa.h

In /usr/include/ I only have GL, GLES and GLES2. There is no GL3 as I found in some tutorials.

I’m running on Arch Linux x86_64 with a NVIDIA graphic card (nvidia closed-source driver).

Here is how I included OpenGL and FreeGLUT APIs in my program:

#define GL3_PROTOTYPES 1
#include <GL/gl.h>
#include <GL/freeglut.h>

But the code doesn’t compile:

$ g++ -pipe -g -Wall -Wextra -pedantic -I. -IHeaders -c Sources/Main.cpp -o Temp/Objects/Main.o 
Sources/Main.cpp: In function ‘int main(int, char**)’:
Sources/Main.cpp:107:59: error: ‘glVertexAttribPointer’ was not declared in this scope
Sources/Main.cpp:108:30: error: ‘glEnableVertexAttribArray’ was not declared in this scope
Sources/Main.cpp:114:35: error: ‘glUseProgram’ was not declared in this scope
Sources/Main.cpp:138:31: error: ‘glDisableVertexAttribArray’ was not declared in this scope

It seems I included the OpenGL 2 headers! But, again, I didn’t find any OpenGL 3 headers on my system, I looked at the Arch repository and AUR, unsuccessfully.

Thank you for your help!

Whatsoever answered 1/5, 2012 at 15:35 Comment(0)
F
7

You don't need a GL3.h, the GL3.h just got rid of all deprecated features. So just include gl.h instead of gl3.h. Downloading and manually copyieng into /usr/include/GL/ is not a real solution, it works yes, but what happens if the add to the mesa package the gl3.h? You're package manager will find conflicts. Better you add the gl3.h to your project or into your home directory and add it to the $PATh or use the -I flag.

Feed answered 7/5, 2012 at 12:39 Comment(0)
H
0

If you grep for glVertexAttribPointer, glEnableVertexAttribArray, glUseProgram and glDisableVertexAttribArray, you will find that they are included in glext.h and glew.h. Try to include one of these headers and compile again.

Hairsplitting answered 1/5, 2012 at 15:44 Comment(1)
If I only include glew.h the code compile but doesn’t link because I have to link the GLEW library, but actually, I don’t need GLEW so I’ll use the gl3.h directly. For glext.h, errors are the same.Whatsoever

© 2022 - 2024 — McMap. All rights reserved.