FLTK 不适用于 Stroustrup 标头
FLTK not working with Stroustrup headers
我目前正在学习 C++,这本书是 编程:使用C++ 的 Stroustrup 和第 12 章。我现在几天以来一直在尝试让 FLTK 与特定的标头一起工作。
我已经用MacPorts安装了FLTK。当我尝试编译包括 Simple_window.h 的代码时,出现以下错误:
bash-3.2# fltk-config --compile main.cpp
/usr/bin/g++-4.2 -arch i386 -I/opt/local/include -pipe -arch i386 -arch i386
-D_THREAD_SAFE -D_REENTRANT -o main main.cpp -arch i386 -arch i386
/opt/local/lib/libfltk.a -lpthread -framework Carbon -framework
ApplicationServices
Undefined symbols:
"vtable for Graph_lib::Window", referenced from:
__ZTVN9Graph_lib6WindowE$non_lazy_ptr in cc1oxcSA.o
(maybe you meant: __ZTVN9Graph_lib6WindowE$non_lazy_ptr)
"vtable for Graph_lib::Button", referenced from:
__ZTVN9Graph_lib6ButtonE$non_lazy_ptr in cc1oxcSA.o
(maybe you meant: __ZTVN9Graph_lib6ButtonE$non_lazy_ptr)
"Simple_window::Simple_window(Point, int, int, String const&)", referenced from:
_main in cc1oxcSA.o
"Graph_lib::Window::draw()", referenced from:
vtable for Simple_windowin cc1oxcSA.o
"typeinfo for Graph_lib::Window", referenced from:
typeinfo for Simple_windowin cc1oxcSA.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
我不知道这意味着什么。我在这里阅读了答案(SO(。我创建了 .o 文件。我正在尝试使用 fltk-config 在 Mac OS 上编译它。
,当你调用编译器时,/opt/local/lib/libfltk.a
前面应该有一个-l
(破折号ell(。 或者,您可以将/opt/local/lib/libfltk.a
替换为可能更传统的-L/opt/local/lib -lfltk
。
我使用以下步骤在Linux上运行FLTK程序"12.3 第一个示例":
- 从作者的网站下载编程代码.zip
然后解压缩它并转到编程代码/GUI 文件夹。
- 在该文件夹中,将
#include <cstdlib>
添加到文件 std_lib_facilities.h 以避免在下一步中出现未声明的 atoi 错误 - 在编程代码/GUI 文件夹中的命令行中运行
make
。这应该创建文件 libbookgui.a。 -
假设程序名为 Example.cpp,请运行以下命令:
GCC
`fltk-config --use-forms --use-gl --use-images --ldflags`
示例.cpp libbookgui.a -
运行 a.out 可执行文件
使用PDF FLTK教程中源代码的示例程序.pdf
我不得不添加以下行才能在我的 Ubuntu Linux 中获得干净的编译。
// 3 includes just below are not in the example but are required
// for a clean compile
#include <Fl/x.H>
#include <stdlib.h>
#include <stdio.h>
必须正确配置编译行。FLTK有fltk配置工具来帮助进行配置。
fltk-config
以获取 FLTK 配置的帮助消息。阅读输出以确定您需要为编译、链接以及您正在使用的包的任何兼容性(gl、glut、表单等(放入什么。
将此信息复制到编译命令中。
也可以使用 --compile prgrname.cxx
开关直接编译。包括 -g,因为您需要 gdb 支持。
例如:
fltk-config --cxxflags --ldflags
给(对我来说(:
-I/usr/include/freetype2 -g -O2 -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk
添加输出名称和输入程序:
gcc -I/usr/include/freetype2 -g -O2 -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk mousedrawtest.cpp mousedraw.cpp -o b.out
虽然FLTK要学习的东西较少,但不适合胆小的人。Erco(Greg Ercolano(的教程非常出色,是许多常见挑战的示例代码。http://seriss.com/people/erco/fltk/
http://www.fltk.org/documentation.php/doc-1.1/basics.html
还有许多其他好的搜索:FLTK教程
从简单的示例程序转换为真正的面向对象模型时,请记住范围,特别是对于顶级窗口及其内容。
今天,星期三,我对 gdb、作用域和命名空间的了解比周一要多得多。
- g++ 说函数不存在,即使包含正确的标头
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 在CMake中使用find_package时,是否会显式包含标头
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何在标头中声明(或定义)函数的问题
- 如何避免在仅标头库中C++类/变量重定义
- C++算法标头中,为什么要使用 "!(val < *first)" ?
- C++标头错误 C2238 意外标记";"
- std::initializer_list,大括号初始化和标头
- 在 c++ 中拆分类和标头中的继承,错误
- 如何确定哪个标头调用 c++ 中的另一个标头
- 如何在生成文件中添加多个标头 (HDR) 和对象?
- 我可以在运行时重新定义在 OpenCascade/OCCT 标头中定义的 c++ 静态常量吗?
- GCC,CMake,预编译标头和维护依赖项
- VisualStudio:使用 Suse Enterprise Server 12 SP5 时,不会下载远程库标头
- 一个标头库中的错误
- 可视化 Bazel C++预编译标头实现
- 如何在 CMake 中添加预编译标头用于 Visual Studio 生成器
- FLTK 不适用于 Stroustrup 标头
- 使用 FLTK 时 Stroustrup 的标头错误