Mac 上的 OpenGL C++ 构建失败 'GL/glut.h' 找不到文件
OpenGL C++ on Mac build fail 'GL/glut.h' file not found
正在尝试 运行 OSX Yosemite 上的示例 OpenGL C++ 程序 xCode。
当 运行 运行程序时,我得到 'GL/glut.h' 找不到文件截图:
不过,我在项目中确实有glut.hheader:
在一个单独的论坛上我读到它应该是 'GLUT/glut.h' 所以我做了,但是收到以下消息:
我需要做什么来配置带有 C++ 的 OpenGL?
这是我正在尝试的代码 运行。如果我可以 运行 这个,那么我应该准备就绪:
#include <GLUT/glut.h>
#include <math.h>
//#include <stdlib.h>
const double TWO_PI = 6.2831853;
/* Initial display-window size. */
GLsizei winWidth = 400, winHeight = 400;
GLuint regHex;
class screenPt
{
private:
GLint x, y;
public:
/* Default Constructor: initializes coordinate position to (0, 0). */
screenPt ( ) {
x = y = 0;
}
void setCoords (GLint xCoord, GLint yCoord) {
x = xCoord;
y = yCoord;
}
GLint getx ( ) const {
return x;
}
GLint gety ( ) const {
return y;
}
};
static void init (void)
{
screenPt hexVertex, circCtr;
GLdouble theta;
GLint k;
/* Set circle center coordinates. */
circCtr.setCoords (winWidth / 2, winHeight / 2);
glClearColor (1.0, 1.0, 1.0, 0.0); // Display-window color = white.
/* Set up a display list for a red regular hexagon.
* Vertices for the hexagon are six equally spaced
* points around the circumference of a circle.
*/
regHex = glGenLists (1); // Get an identifier for the display list.
glNewList (regHex, GL_COMPILE);
glColor3f (1.0, 0.0, 0.0); // Set fill color for hexagon to red.
glBegin (GL_POLYGON);
for (k = 0; k < 6; k++) {
theta = TWO_PI * k / 6.0;
hexVertex.setCoords (circCtr.getx ( ) + 150 * cos (theta),
circCtr.gety ( ) + 150 * sin (theta));
glVertex2i (hexVertex.getx ( ), hexVertex.gety ( ));
}
glEnd ( );
glEndList ( );
}
void regHexagon (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glCallList (regHex);
glFlush ( );
}
void winReshapeFcn (int newWidth, int newHeight)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble) newHeight);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Reshape-Function & Display-List Example");
init ( );
glutDisplayFunc (regHexagon);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}
当您将其更改为“GLUT/glut.h` 时,它会正确找到 header。不幸的是,现在您会收到有关已弃用函数的所有警告消息。
有关已弃用函数消息的修复,请参阅 xcode 5 deprecation warning about glut functions or Glut deprecation in Mac OSX 10.9, IDE: QT Creator
您还收到一条错误消息,指出您的主函数需要 return 一个 int。这是阻止您的代码编译的原因,而不是警告。
编辑
您应该将主函数更改为 return 类型的 int。
int main(int argc, char *argv[])
{
/* code */
return 0;
}
一些编译器会接受 void 作为 main 的 return 类型,但这是 non-standard 扩展。
尝试#include <GLUT/glut.h>
因为框架链接名称是 GLUT。
正在尝试 运行 OSX Yosemite 上的示例 OpenGL C++ 程序 xCode。
当 运行 运行程序时,我得到 'GL/glut.h' 找不到文件截图:
不过,我在项目中确实有glut.hheader:
在一个单独的论坛上我读到它应该是 'GLUT/glut.h' 所以我做了,但是收到以下消息:
我需要做什么来配置带有 C++ 的 OpenGL?
这是我正在尝试的代码 运行。如果我可以 运行 这个,那么我应该准备就绪:
#include <GLUT/glut.h>
#include <math.h>
//#include <stdlib.h>
const double TWO_PI = 6.2831853;
/* Initial display-window size. */
GLsizei winWidth = 400, winHeight = 400;
GLuint regHex;
class screenPt
{
private:
GLint x, y;
public:
/* Default Constructor: initializes coordinate position to (0, 0). */
screenPt ( ) {
x = y = 0;
}
void setCoords (GLint xCoord, GLint yCoord) {
x = xCoord;
y = yCoord;
}
GLint getx ( ) const {
return x;
}
GLint gety ( ) const {
return y;
}
};
static void init (void)
{
screenPt hexVertex, circCtr;
GLdouble theta;
GLint k;
/* Set circle center coordinates. */
circCtr.setCoords (winWidth / 2, winHeight / 2);
glClearColor (1.0, 1.0, 1.0, 0.0); // Display-window color = white.
/* Set up a display list for a red regular hexagon.
* Vertices for the hexagon are six equally spaced
* points around the circumference of a circle.
*/
regHex = glGenLists (1); // Get an identifier for the display list.
glNewList (regHex, GL_COMPILE);
glColor3f (1.0, 0.0, 0.0); // Set fill color for hexagon to red.
glBegin (GL_POLYGON);
for (k = 0; k < 6; k++) {
theta = TWO_PI * k / 6.0;
hexVertex.setCoords (circCtr.getx ( ) + 150 * cos (theta),
circCtr.gety ( ) + 150 * sin (theta));
glVertex2i (hexVertex.getx ( ), hexVertex.gety ( ));
}
glEnd ( );
glEndList ( );
}
void regHexagon (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glCallList (regHex);
glFlush ( );
}
void winReshapeFcn (int newWidth, int newHeight)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble) newHeight);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Reshape-Function & Display-List Example");
init ( );
glutDisplayFunc (regHexagon);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}
当您将其更改为“GLUT/glut.h` 时,它会正确找到 header。不幸的是,现在您会收到有关已弃用函数的所有警告消息。
有关已弃用函数消息的修复,请参阅 xcode 5 deprecation warning about glut functions or Glut deprecation in Mac OSX 10.9, IDE: QT Creator
您还收到一条错误消息,指出您的主函数需要 return 一个 int。这是阻止您的代码编译的原因,而不是警告。
编辑 您应该将主函数更改为 return 类型的 int。
int main(int argc, char *argv[])
{
/* code */
return 0;
}
一些编译器会接受 void 作为 main 的 return 类型,但这是 non-standard 扩展。
尝试#include <GLUT/glut.h>
因为框架链接名称是 GLUT。