1

Eclipse で FLTK をセットアップするのに問題があります。次のコードで OpenGL ウィンドウを作成しようとしています (ここで見つけました)。

#include <FL/Fl.H>
#include <FL/Fl_Gl_Window.H>
#include <FL/gl.h>

//
// Simple resizable 2D GL  window
// erco 10/08/05
//
class MyGlWindow : public Fl_Gl_Window {
    // DRAW METHOD
    //       OpenGL window: (w,h) is upper right, (-w,-h) is lower left, (0,0) is center
    //
    void draw() {
        // First time? init viewport, etc.
        if (!valid()) {
            valid(1);
            glLoadIdentity();
            glViewport(0,0,w(),h());
            glOrtho(-w(),w(),-h(),h(),-1,1);
        }
        //  Clear screen
        glClear(GL_COLOR_BUFFER_BIT);
        //  Draw white 'X'
        glColor3f(1.0, 1.0, 1.0);
        glBegin(GL_LINE_STRIP); glVertex2f(w(), h()); glVertex2f(-w(),-h()); glEnd();
        glBegin(GL_LINE_STRIP); glVertex2f(w(),-h()); glVertex2f(-w(), h()); glEnd();
    }
    // HANDLE WINDOW RESIZING
    //    If window reshaped, need to readjust viewport/ortho
    //
    void resize(int X,int Y,int W,int H) {
        Fl_Gl_Window::resize(X,Y,W,H);
        glLoadIdentity();
        glViewport(0,0,W,H);
        glOrtho(-W,W,-H,H,-1,1);
        redraw();
    }
public:
    // CONSTRUCTOR
    MyGlWindow(int X,int Y,int W,int H,const char*L=0) : Fl_Gl_Window(X,Y,W,H,L) {
    }
};
// MAIN
int main() {
     Fl_Window win( 500,  300);
     MyGlWindow mygl(10, 10, win.w()-20, win.h()-20);
     win.resizable(mygl);
     win.show();
     return(Fl::run());
}

発行されるコマンドは次のとおりです。

make -k all 
Building file: ../main.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/include/FL -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"
Finished building: ../main.cpp

Building target: Experiment01
Invoking: GCC C++ Linker
g++ -L/usr/lib -o"Experiment01"  ./main.o   -lGL -lfltk

エラーは次のとおりです。

/usr/include/FL/Fl_Gl_Window.H undefined reference to `Fl_Gl_Window::init()'
/usr/include/FL/Fl_Gl_Window.H undefined reference to `vtable for Fl_Gl_Window'
undefined reference to `Fl_Gl_Window::~Fl_Gl_Window()'
undefined reference to `Fl_Gl_Window::resize(int, int, int, int)'

他に何をリンクする必要がありますか? -llibfltk.so -llibfltk_gl.so などを試しましたが、指定されたライブラリが見つからないと常に表示されます。

4

2 に答える 2

1

「基本例」の章を確認しましたか?

おそらく、すべてのヘッダーファイルを含むディレクトリ「fltk」の場所をコンパイラに指示する必要があります。これは通常、コンパイラ行に追加された-Iオプションを使用して行われます。

c++ -I/usr/local/include ...

同様に、アプリケーションをリンクするときは、FLTKライブラリを使用するようにコンパイラに指示する必要があります。Xでは、fltkが呼び出すいくつかのライブラリを含める必要があります。

c++ ... -L/usr/local/lib -lfltk2 -lXext -lXinerama -lXft -lX11 -lXi -lm

あなたの場合、FLのすべてのヘッダー定義が含まれているわけではないかもしれません/usr/include/FL:他の場所にあるかもしれません。

于 2009-09-09T04:06:26.700 に答える
0

スコット、残念ながら FLTK 1.x は提供していません (少なくとも私が最後にチェックしたときは提供していませんでした) fltk2-config

fltk2-config --use-gl --ldflags

出力は次のようになります。

-Wl,-rpath,/usr/lib -lfltk2_gl -lGLU -lGL -lfltk2 -lX11 -lXi -lXinerama -lXft -ldl -lpthread -lm -lXext

したがって、FLTK 1.x アプリケーションの LDFLAGS は次のようになると思います。

-Wl,-rpath,/usr/lib -lfltk_gl -lGLU -lGL -lfltk -lX11 -lXi -lXinerama -lXft -ldl -lpthread -lm -lXext
于 2011-11-02T15:29:23.707 に答える