6

次のプログラムを考えて、Cygwin でコンパイルしてみましょう。

#include <GL/glut.h>
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glLoadIdentity();
}

コンパイルして問題なく動作します。-I/usr/include/openglめちゃくちゃ重要なようです。

g++ -I/usr/include/opengl -I../include/cygwin -L../lib/cygwin test.cpp -o test.exe -lglut32 -lglu32 -lglew32 -lopengl32

今、

#include <GL/glew.h> // from newest NVIDIA SDK
#include <GL/glut.h>
int main(int argc, char** argv)
{
    glewInit();
    glutInit(&argc, argv);
    glLoadIdentity();
}

によって編集された

g++ -I/usr/include/opengl -I../include/cygwin -L../lib/cygwin test.cpp -o test.exe -lglut32 -lglu32 -lglew32 -lopengl32

失敗します。2 番目のアプリケーションをビルドする方法

初め

NVIDIA SDK から glew by をビルドするには、VS、cygwin、-D_WIN32 を指定した cygwin など、いくつかの方法があります。ソースからオリジナル glew の cygwin ビルドも試しました。

VSビルドが与える

/cygdrive/c/DOCUME~1/kelebron/LOCALS~1/Temp/ccErbecl.o:test.cpp:(.text+0xa8): undefined reference to `_glLoadIdentity'
collect2: ld returned 1 exit status

cygwin ビルドは多くを提供します

../lib/cygwin/glew32.lib(glew.o):glew.c:(.text+0x38e): undefined reference to `_glXGetProcAddress'

また、-D_WIN32 を指定した cygwin はまったくコンパイルされません (この投稿に少し刺激を受けました)。

2番


-L/lib/w32api
または -L/usr/X11R6/lib -lX11 -lXi -lXmuを使用して OpenGL とリンクするには、2 つの方法があるようです。

ただし、-L ディレクティブは何も変更しません。/usr/lib/w32api/libopengl32.a がありますが、X11 バージョン (/usr/X11R6/lib/libGL?) がない可能性があります。Cygwin にはどのパッケージを含める必要がありますか? libGLから始まるすべてをインストールしました(だけでなく...)。

4

4 に答える 4

6

少し前に同様の問題があり、Cygwin で opengl コードをコンパイルするには 2 つの方法があることがわかりました。
ネイティブの win32api ライブラリ glut32 glu32 opengl32 (同じく glui) に対する最初のリンク。これらはやや古いものです:
glut v3.7.6
opengl v1.1
glui 2.11

2 番目の方法では、X11 ライブラリ glut glu gl を使用します。それらのヘッダー ファイルには新しいバージョン番号があります (GL 拡張機能を使用するには v1.2 以上が必要であることに注意してください):
glut v4 (freeglut)
opengl v1.3
glext
...

最初のオプションを使用するには、-I/usr/ include/opengl
および以下に対するリンク: -lglut32 -lGLU32 -lOpenGL32

X11 バージョンを使用するには、以下でコンパイルします: -I/usr/include/(これはデフォルトで含まれています)
とリンクします: -lglut -lGLU -lGL (違いに注意してください)
X11 ヘッダーとライブラリを追加できますが、それらは GL のものに含まれていると思います。
-I/usr/X11R6/include
-L/usr/X11R6/lib -lXmu -lXi -lXext -lX11


Cygwin インストーラーでは、次のパッケージを選択できます。
opengl -- win32 バージョンの opengl、glut、glui
libglutを提供します。 -devel -- glut (freeglut) の X11 バージョン。これはすべての依存パッケージも選択します。(glproto、libGL libGLU、libX11、...) X サーバーが必要になるため、 Xorg サーバー
も含めることをお勧めします。 お役に立てれば。


于 2009-06-08T01:38:15.347 に答える
3

同じ問題について話していることを確認するために、以前に受け取ったメッセージを次に示します。

$ g++ -o glew_test.exe glew_test.cpp -lglut32 -lglew32
c:\Users\Fredrik\Users\Fredrik\AppAppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0x1c): ` への未定義の参照__glutInitWithExit'
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0x37): `__glutCreateWindowWithExit'
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfrへの未定義の参照.o:
glew_test.cpp:(.text+0x53): `__glutCreateMenuWithExit' への未定義の参照
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0x9e): 未定義の参照
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0xb2): 「glutInitWindowPosition」への未定義参照
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0xc6): 「glutInitWindowSize」への未定義の参照
collect2: ld が 1 つの終了ステータスを返しました

次のページは、この問題を解決するのに役立ちました。

基本的に、ファイルの先頭で _STDCALL_SUPPORTED と _M_IX86 を定義し、glew.h の前に windows.h を含める必要がありました。

次に、フラグ -lglut32 -lglew32 を使用しました

試してみたい場合は、ソースも以下に示します。

#define _STDCALL_SUPPORTED
#define _M_IX86
#include <windows.h>
#include <GL/glew.h>
#include <GL/glut.h>
#include <cstdio>

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutCreateWindow("MM 2004-05");
    glewInit();
    if (glewIsSupported("GL_VERSION_2_0"))
        printf("Ready for OpenGL 2.0\n");
    else {
        printf("OpenGL 2.0 not supported\n");
    }
    return 0;
}

なんらかの理由で、OpenGL2.0 テストにはウィンドウが必要であることに注意してください。

于 2009-11-21T03:33:57.473 に答える
1

X11 ではなく、ネイティブの Win32 ライブラリに対してリンクしたいようです。-L/lib/w32apiを追加します。それ以外の場合は、X11 ライブラリ ( -L/usr/X11R6/lib -lX11 -lXi -lXmu ) に対してリンクして、glX* リンカー エラーを取り除く必要があります。

于 2008-12-23T20:13:48.060 に答える
0

以前の提案は役に立ちましたか?

GLEW のリンクまたはコンパイルで問題に直面しているかどうかはわかりません。ソースを含めてGLEWを使用し、過去にリンクして使用しました。

GLEW をコンパイルする場合は、正しい zip を選択してください。*nix ベースのコードのスクリプトを使用すると、Windows では正しく実行されない可能性があります (Cygwin の場合は不明)。

GLEW は、ヘッダーとリンクの順序で最初にする必要があります。

于 2009-11-03T22:11:30.633 に答える