g ++链接器:/usr/lib/libGL.so.1:无法读取符号:无效操作

Posted

技术标签:

【中文标题】g ++链接器:/usr/lib/libGL.so.1:无法读取符号:无效操作【英文标题】:g++ linker: /usr/lib/libGL.so.1: could not read symbols: Invalid operation 【发布时间】:2010-08-13 12:40:27 【问题描述】:

我正在尝试在 Ubuntu 10.04 下构建一个非常简单的 OpenGL 应用程序(我有一个 32 位系统)。

当我尝试编译文件时,我收到错误消息:

g++ -L/usr/lib simple.cpp -lglut
/usr/bin/ld: /tmp/ccoPczAo.o: undefined reference to symbol 'glEnd'
/usr/bin/ld: note: 'glEnd' is defined in DSO //usr/lib/libGL.so.1 so try adding it to the linker command line
//usr/lib/libGL.so.1: could not read symbols: Invalid operation
collect2: ld returned 1 exit status

有人知道我做错了什么吗?

【问题讨论】:

与您的问题并不真正相关,但我看到您使用的是 glEnd(),自 GL3 以来已弃用。如果您正在开始 OpenGL 编程,我建议您开始使用带有“核心配置文件”的 GL3+。旧的 OpenGL 不仅速度慢,而且非常有限。 【参考方案1】:

您需要在命令行中包含 opengl 库以及 glut 库/。 尝试将 -lGL 添加到命令行的末尾

g++ -L/usr/lib simple.cpp -lglut -lGL

【讨论】:

谢谢。它部分解决了我的问题,所以我可以完成剩下的工作(还必须添加 -lGLU)。 任何人都可以解释为什么它打印/usr/lib/libGL.so.1: could not read symbols: Invalid operation?看起来它试图读取丢失的库,但失败了。【参考方案2】:

编译

g++ main.cpp -o main.bin -lGL -lGLU -lglut

或尝试OpenGL primer 的以下make 文件,它非常紧凑。 这个帮助我运行了我的 Hello world OpenGL。 感谢OpenGL Primer

CC = g++
SRC = main.cpp imageloader.cpp
LIBS = -lGL -lGLU -lglut
EXEC = cube.bin

all:
       $(CC) $(SRC) -o $(EXEC) $(LIBS)

clean:
       rm -rf $(EXEC) *~

【讨论】:

以上是关于g ++链接器:/usr/lib/libGL.so.1:无法读取符号:无效操作的主要内容,如果未能解决你的问题,请参考以下文章

Mac 上的 G++ 链接时优化 - 编译器/链接器错误?

跨 g++ 编译器链接器错误

未定义对向量<String> g++ 链接器错误的引用[重复]

链接器错误,使用 g++ 链接到由 gcc 编译的库,未定义对该函数的引用

关于工作C ++ 03代码的G ++(C ++ 14)链接器错误

链接器