【问题标题】:Undefined reference to wxGLCanvas' constructor?未定义对 wxGLCanvas 构造函数的引用?
【发布时间】:2024-01-12 14:15:01
【问题描述】:

我使用wx-config --libs 为我的应用程序生成链接器参数,输出如下:

-L/usr/lib/x86_64-linux-gnu -pthread -lwx_gtk2u_xrc-3.0 -lwx_gtk2u_html-3.0 -lwx_gtk2u_qa-3.0 -lwx_gtk2u_adv-3.0 -lwx_gtk2u_core-3.0 -lwx_baseu_xml-3.0 -lwx_baseu_net-3.0 -lwx_baseu-3.0

我的应用程序编译但没有链接,而是引用了一个未定义的对 wxGLCanvas 的构造函数的引用。我知道一个构造函数已被弃用,但我似乎正在使用不是:wxGLCanvas(<frame>,wxID_ANY,NULL),如 http://docs.wxwidgets.org/3.0/classwx_g_l_canvas.html 所示。

其余的链接器错误都是对 wxGLCanvas 的各种方法的未定义引用。为了安全起见,我在所有目标中添加了-DwxUSE_GLCANVAS=1,但这没有效果。我做错了什么?

如果相关,我在编译期间也使用wx-config --cflags

-I/usr/lib/x86_64-linux-gnu/wx/include/gtk2-unicode-3.0 -I/usr/include/wx-3.0 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread

另请注意,文档仍建议使用 SetCurrent,它似乎已被标记为已弃用。是否有比我链接的文档更新的文档?

【问题讨论】:

  • 将要链接的库放在哪里?我的意思是在命令行上?目标文件和库的顺序可能很重要。始终将库放在您的对象(或源)文件之后。
  • 行尾:$(CXX) -o $@ $(OBJECTS) $(LDFLAGS) ...LDFLAGS 是... >
  • Reading this wiki 看来您需要在wx-config 命令中添加--gl-libs 才能获取OpenGL 库。你试过吗?
  • 如果您安装了 2 个版本的 wxWidgets,您可能有 2 个版本的配置工具。在我的系统上,如果我使用 v3 标头,我必须使用 wx-config-3.0 而不是 wx-config
  • Joachim 做到了,谢谢! @Galik 尽管安装了 3.0 dev,但我似乎没有 wx-config-3.0。

标签: c++ wxwidgets deprecated undefined-reference


【解决方案1】:

wx-config --libs 等价于wx-config --libs std,其中“std”代表默认使用的“标准”库的子集。如果您想使用任何不在此列表中的库,例如“webview”、“richtext”或实际上是“gl”,您需要明确列出它们。

所以在您的情况下使用的正确命令是wx-config --libs std,gl

【讨论】: