【问题标题】:Undefined References Compiling OpenGL/glfw/glew on Ubuntu(g++) [duplicate]未定义的参考在 Ubuntu(g++)上编译 OpenGL/glfw/glew [重复]
【发布时间】:2015-06-10 03:58:14
【问题描述】:

我关注this tutorial。我cmake'dmake/make install'd glfwglew 完美(据我所知)。但是,当我尝试编译示例代码时...

#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main()
{
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    return 0;
}

...使用他的链接器标志...

-lGLEW -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi

...我收到以下错误:

/usr/bin/ld: /usr/local/lib/libglfw3.a(x11_init.c.o): undefined reference to symbol 'XF86VidModeQueryExtension'
/usr/lib/x86_64-linux-gnu/libXxf86vm.so.1: error adding symbols: DSO missing from command line

我用谷歌搜索了这个错误,有人建议添加-lXxf86vm。它摆脱了最初的错误,但又增加了很多:

/usr/local/lib/libglfw3.a(x11_init.c.o): In function `initExtensions':
x11_init.c:(.text+0x1b93): undefined reference to `XineramaQueryExtension'
x11_init.c:(.text+0x1bad): undefined reference to `XineramaIsActive'
/usr/local/lib/libglfw3.a(x11_init.c.o): In function `_glfwCreateCursor':
x11_init.c:(.text+0x22ee): undefined reference to `XcursorImageCreate'
x11_init.c:(.text+0x23c5): undefined reference to `XcursorImageLoadCursor'
x11_init.c:(.text+0x23d5): undefined reference to `XcursorImageDestroy'
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwPlatformGetMonitors':
x11_monitor.c:(.text+0x743): undefined reference to `XineramaQueryScreens'

如何确定我需要哪些标志?如果重要的话,这就是我的 makefile 的结构:

CC = g++
COMPILER_FLAGS = -std=c++11
FILES = *.cpp
LINKER_FLAGS =   -lGLEW -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi -lXxf86vm
OBJS = *.o
LINUX_BIN = HelloWindow

#Compile(output into error.txt if there is an error), link, then run
linux:
    $(CC) $(COMPILER_FLAGS) -c $(FILES) 2> "errors.txt"
    $(CC) $(COMPILER_FLAGS) $(OBJS) -o $(LINUX_BIN) $(LINKER_FLAGS)
    ./$(LINUX_BIN)        

谢谢!

【问题讨论】:

  • 对于 GLFW,你可能需要-lGL -lX11 -lXi -lXrandr -lXxf86vm -lXinerama -lXcursor -lrt -lm
  • 您如何知道要使用哪些链接器标志?
  • 通过查看未解析的符号...
  • 这个问题不是重复的:)我很感激它在这里,帮了我很多...

标签: opengl ubuntu g++ glfw glew


【解决方案1】:

德哈斯是正确的。以下是我使用的标志:

-lGLEW -lglfw3 -lGL -lX11 -lXi -lXrandr -lXxf86vm -lXinerama -lXcursor -lrt -lm -pthread

【讨论】:

  • 在努力让 GLFW v2 编译和链接为静态对象时,我也能够使用此答案。
  • 我还必须在 Ubuntu 上添加 -ldl 标志,并且能够删除 -lrt-lm 标志。我认为这一切都归结为软件包的组合/它们的安装方式,但这个列表是所有的,包括哪个很棒。
猜你喜欢
  • 2015-07-03
  • 2021-10-18
  • 2012-10-17
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多