OpenGLの使用は非常に新しいです。実行しようとしているプログラムは私の教授が提供しているので、実際には書いていないので、プログラムを実行するのに問題があります。このプログラムは、黒い画面上に白い正方形を作ることを想定しています。私はMac Sierra 10.12.2を使用しています。また、私はすでに展開ターゲットを10.8に変更しました。これは、それ以降のものでコンパイルする際のエラーのためです。今私がビルドしてxcodeで実行しようとすると、2つのエラーが発生します。アーキテクチャx86_64(xcodeのOpenGL)のシンボル
これらのエラーを取得イムされ、今ここに
Undefined symbols for architecture x86_64:
"exit(int)", referenced from:
myKeyboard(unsigned char, int, int) in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
は、私はそれをコンパイルしようとしているとおりにコードです。
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
const int screenHeight = 480; // window height is 480
const int screenWidth = 640 ; //window width is 640
// <<<<<<<<<<<<<<<<<<<<<Prototypes>>>>>>>>>>>>>>>>>>
void exit(int) ;
// <<<<<<<<<<<<<<<<<<<<<<<myInit>>>>>>>>>>>>>>>>>>>
void myInit(void)
{
glClearColor(1.0,1.0,1.0,0.0); // set white background color
glColor3f(0.0f, 0.0f, 0.0f); // set the drawing color
glPointSize(4.0); // a ?dot? is 4 by 4 pixels
glLineWidth(4.0); // a ?dot? is 4 by 4 pixels
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}
// <<<<<<<<<<<<<<<<<<<<<<<<myDisplay>>>>>>>>>>>>>>>>>
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT); // clear the screen
glBegin(GL_POINTS);
// glBegin(GL_LINE_STRIP) ;
// glBegin(GL_LINE_LOOP) ;
// glBegin(GL_POLYGON);
glVertex2i(289, 190); // Dubhe
glVertex2i(320, 128) ; // Merak
glVertex2i(239, 67) ; // Phecda
glVertex2i(194, 101) ; // Megrez
glVertex2i(129, 83) ; // Alioth
glVertex2i(75, 73) ; // Mizar
glVertex2i(74, 74) ; // Alcor
glEnd();
glFlush(); // send all output to display
}
// <<<<<<<<<<<<<<<<<<<<<<<<myKeyboard>>>>>>>>>>>>>>
void myKeyboard(unsigned char theKey, int mouseX, int mouseY)
{
switch(theKey)
{
case 'Q':
case 'q':
exit(-1); //terminate the program
default:
break; // do nothing
}
}
// <<<<<<<<<<<<<<<<<<<<<<<<main>>>>>>>>>>>>>>>>>>>>>>
int main(int argc, char** argv)
{
glutInit(&argc, argv); // initialize the toolkit
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // set display mode
glutInitWindowSize(640, 480); // set window size
glutInitWindowPosition(100, 150); // set window position on screen
glutCreateWindow("Big Deep - Type Q or q to quit") ; // open the screen window
glutDisplayFunc(myDisplay); // register redraw function
glutKeyboardFunc(myKeyboard); // register the keyboard action function
myInit();
glutMainLoop(); // go into a perpetual loop
}
ご協力いただければ幸いです。
私は非常に教授がまだこのようなOpenGLを教えていることにうんざりしています。あなたは教授と一緒に座り、[彼らはレガシーOpenGLを教えるべきではない](http://gamedev.stackexchange.com/questions/34108/opengl-vbo-or-glbegin-glend)を思い起こさせ、 OpenGLの機能を2008年に廃止されていないものに変更しました。私はリンクした投稿からの大きな引用:「古いものを最初に学ぶ方がより簡単だと思う人もいると思う人もいます。放棄しなければなりません。 – Xirema
参考までに、あなたが得ているエラーはリンクエラーの結果です。特に教授の 'exit'の使用に関係しています。何らかの形で、ビルドプロセスのどこかで、正しい実行可能ファイルにリンクするための正しいオブジェクトファイルを参照していません。私があなたの特定のビルド環境について何か知っていたら、より詳細な診断手順を回答として投稿したいと思います。 – Xirema
2を教えたいという彼の推論。xは「教えるのがより良いし、4を学ぶのではなく4.xにしてより古いものを学ぶのが簡単だから」ということもあります。私はおそらく間違っているが、私はexit関数はGLUTライブラリの一部ではないと思うが、私は正直にはわからない。それは私が本当に助けてくれたものすべてについてのことです。助けてくれてありがとう! – csm60