我一直在尝试获取一些实现 GFLW3 的简单 GL 代码,以便在 QT Creator(在 Ubuntu 13.04 上)上进行编译。但是,当它尝试构建时,我一直得到相同的输出:

undefined reference to symbol 'XF86VidModeQueryExtension'

然后我转到 .pro 文件并链接 lXxf86vm.so 库文件并添加 -lXxf86vm 但它仍然提供相同的输出:
g++ -m64 -o GL-Test main.o windowtest.o frametest.o   -L/usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 -L/user/lib/x86_64-linux-gnu/libXxf86vm.so
-L/user/lib/x86_64-linux-gnu/libXxf86vm.a -L/user/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0
-L/home/syk435/Testing\ Gl/GL-Test/../../../../usr/lib/x86_64-linux-gnu/ -lXxf86vm -lX11 -lGL -L/usr/local/lib -lglfw3
/usr/bin/ld: /usr/local/lib/libglfw3.a(x11_init.c.o): undefined reference to symbol 'XF86VidModeQueryExtension'
/usr/bin/ld: note: 'XF86VidModeQueryExtension' is defined in DSO /home/syk435/Testing Gl/GL-Test/../../../../usr/lib/x86_64-linux-gnu//libXxf86vm.so
so try adding it to the linker command line
/home/syk435/Testing Gl/GL-Test/../../../../usr/lib/x86_64-linux-gnu//libXxf86vm.so:
could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

如您所见,我尝试了四种不同的方法来链接正确的库,但它仍然给我相同的“ undefined reference ”和“无法读取符号”错误。关于正确链接方式的任何见解?

编辑:Pro 文件:TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

CONFIG += link_pkgconfig
PKGCONFIG += x11

CONFIG += link_pkgconfig
PKGCONFIG += gl

CONFIG += link_pkgconfig
PKGCONFIG += glfw3

LIBS += -lXxf86vm -L/usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
LIBS += -lXxf86vm -L/user/lib/x86_64-linux-gnu/libXxf86vm.so
LIBS += -lXxf86vm -L/user/lib/x86_64-linux-gnu/libXxf86vm.a
LIBS += -lXxf86vm -L/user/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0

最佳答案

问题在这里:

LIBS += -lXxf86vm -L/usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
LIBS += -lXxf86vm -L/user/lib/x86_64-linux-gnu/libXxf86vm.so
LIBS += -lXxf86vm -L/user/lib/x86_64-linux-gnu/libXxf86vm.a
LIBS += -lXxf86vm -L/user/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0

您正在使用带有文件名而不是路径的 -L 选项!您应该将这四行更改为:
LIBS += -lXxf86vm -L/user/lib/x86_64-linux-gnu/

其次,如果排序很重要,您也需要对 glfw3 使用 LIBS,如下所示:
LIBS += -lglfw3 -lXxf86vm -L/user/lib/x86_64-linux-gnu/

如果需要,不要忘记分配 glfw3 路径。这取决于您的设置。您可能会尝试交换当前 PKGCONFIG 和 LIBS 语句的顺序,但如果您四处移动代码,那么 future 的证明就没有那么多了。另外,如果可以共享两个库之间的路径,我个人不会使用PKGCONFIG,只是LIBS。

关于c++ - 对符号 'XF86VidModeQueryExtension' 的 undefined reference (linux,qt creator IDE),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20850123/

10-12 17:11