0

私は OpenGL ライブラリをインストールしたばかりで (実際には、ほとんどのソースはコンピューターで既に作成されています)、最初のプログラムをコンパイルしようとしました。

x86 の場合は完全に実行されましたが、x64 の場合は glut32.lib を構成してリダイレクトします

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64

以下のようなエラーが発生しましたが、解決方法がわかりません。ライブラリを正しくリンクしていないように見えるエラーですか?

error LNK2019: unresolved external symbol __imp_glutSwapBuffers referenced in function "void __cdecl drawcube(void)" (?drawcube@@YAXXZ)
error LNK2019: unresolved external symbol __imp_glutMainLoop referenced in function main
error LNK2019: unresolved external symbol __imp_glutIdleFunc referenced in function main
error LNK2019: unresolved external symbol __imp_glutDisplayFunc referenced in function main

私のテストコードはこのようなものです

<!-- language: cpp -->
void drawcube(void)
{

    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glRotatef(angle, 0.0, 1.0, 0.0);
    glBegin(GL_LINE_LOOP);
    glVertex3iv(a);
    glVertex3iv(b);
    glVertex3iv(c);
    glVertex3iv(d);
    glEnd();
    glFlush();
    glutSwapBuffers();
}

<!-- language: cpp -->
int main(int argc, char **argv)
{

    glutInit(&argc, argv);
    glutInitWindowSize(800, 600);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutCreateWindow("Test OpenGL");
    glutDisplayFunc(drawcube);
    glutIdleFunc(drawcube);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-30.0, 30.0, -30.0, 30.0, -30.0, 30.0);
    glRotatef(30.0, 1.0, 0.0, 0.0);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glutMainLoop();

    return(0);
}

@datenwolf からの回答は役に立ちました。

x64でコンパイルされたエラーなしでfreegultを使用するように変更しました。

4

2 に答える 2

2

私は OpenGL ライブラリをインストールしたばかりで (実際、ほとんどのソースは既に私のコンピューターで作成されています)、最初のプログラムをコンパイルしようとしました。

は?OpenGL 対応ドライバーをインストールしたということですか (つまり、Windows に同梱されている不自由なドライバーを使用する代わりに、GPU メーカーの Web サイトからドライバーをダウンロードしました)? 通常、OpenGL はライブラリの形では提供されません。これは、通常はドライバーの形式で実装される仕様です。また、すべてのコンパイラには OpenGL プログラムのコンパイルに必要なものがすべて同梱されているため、特別な「OpenGL SDK」は必要ありません。何をインストールしたとしても、おそらくそれは必要ないでしょう。

error LNK2019: unresolved external symbol __imp_glutSwapBuffers referenced in function "void __cdecl drawcube(void)" (?drawcube@@YAXXZ)

それは OpenGL ではなく、GLUT です。また、GLUT は OpenGL の一部ではありません。これは、小規模でシンプルな OpenGL デモの作成を目的とした、サード パーティのフレームワーク ライブラリです。実際には、システムに個別にインストールする必要があります。FreeGLUT を使用する (または GLUT をまったく使用しない) ことをお勧めします。また、32 ビット アーキテクチャと 64 ビット アーキテクチャの両方で DLL が opengl32.dll と呼ばれる OpenGL とは異なり、これを適切にコンパイルするには、アーキテクチャ固有のバージョンの GLUT が必要です。古い GLUT はメンテナンスされていないため、64 ビット バージョンはありません。したがって、私の FreeGLUT の推奨事項です。

于 2012-10-09T13:49:40.760 に答える