在 Eclipse 中构建 FLTK 项目

Posted

技术标签:

【中文标题】在 Eclipse 中构建 FLTK 项目【英文标题】:Building FLTK Project in Eclipse 【发布时间】:2009-09-09 02:18:32 【问题描述】:

我无法在 Eclipse 中设置 FLTK。我正在尝试使用以下代码(我发现 here)创建一个 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等,但总是说找不到指定的库。

【问题讨论】:

【参考方案1】:

你检查chapter "Basic Example"了吗?

您可能需要告诉编译器在哪里可以找到包含所有头文件的目录“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 中:其他地方可能还有一些。

【讨论】:

【参考方案2】:

Scott,不幸的是,FLTK 1.x 没有提供(至少我上次检查时没有)来自 FLTK2 分支的出色的 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

【讨论】:

以上是关于在 Eclipse 中构建 FLTK 项目的主要内容,如果未能解决你的问题,请参考以下文章

如何构建 FLTK 以与 Netbeans (Windows) 一起使用

根据构建目标,在 fltk-rs 中使用 fltk::osxMenuBar 或 MenuBar

eclipse构建及运行maven web项目

使用 Makefile 的旧 C++ 项目 .. 迁移到 Eclipse IDE?

如何在函数中调用 FLTK 代码?

在 macOS 上构建 FLTK 时,“'_Nonnull' 不能应用于非指针类型”?