对符号 glTexImage2D 的未定义引用

Posted

技术标签:

【中文标题】对符号 glTexImage2D 的未定义引用【英文标题】:undefined reference to symbol glTexImage2D 【发布时间】:2015-03-23 03:51:15 【问题描述】:

我正在尝试让 OpenGL 正常工作并且遇到与此处完全相同的问题: c++ OpenGL undefined references

我已经下载了两个软件包并使用了相同的教程。除了我使用 Ubuntu 14.04.2 LTS 并且我的问题没有通过上述解决方案解决。

它将问题减少到一个未定义的引用,但仍然不起作用:

g++ -Wall -lGL -o cube main.cpp imageloader.cpp -lglut -lGLU 
...
/usr/bin/ld: /tmp/ccWzhHjf.o: undefined reference to symbol 'glTexImage2D'
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: error adding symbols: DSO missing from
command line collect2: error: ld returned 1 exit status make: *** [cube] Error 1

我该如何解决这个问题?

【问题讨论】:

请显示您的链接器调用。如果您通过编译器驱动程序调用,它带有-o 选项。 我用过:g++ -Wall -lGL -o cube main.cpp imageloader.cpp -lglut -lGLU 如果libGL提供glTexImage2D,那么你需要将-lGL移动到命令的末尾。图书馆的顺序和位置很重要(如-lGL-lGLU)。请参阅ld(1) man page。 已修复!非常好。非常感谢。 您应该将您的解决方案添加为答案块中的答案。然后,接受你自己的答案,让其他人知道。 【参考方案1】:

编辑 Make File 并将其更改为此

  CC = g++
CFLAGS = -Wall -lGL
PROG = cube

SRCS = main.cpp imageloader.cpp

ifeq ($(shell uname),Darwin)
    LIBS = -framework OpenGL -framework GLUT
else
    LIBS = -lglut -lGLU
endif

all: $(PROG)

$(PROG):    $(SRCS)
    $(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS)

clean:
    rm -f $(PROG)

我所做的是将 -lGL 添加到 CFLAGS 并将 -lGLU 添加到 LIBS 到标志,以便它可以链接到所需的库

【讨论】:

【参考方案2】:
/usr/bin/ld: /tmp/ccWzhHjf.o: undefined reference to symbol 'glTexImage2D'
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: error adding symbols: DSO missing 

libGL.so.1 部分基本上告诉你共享库有问题(它丢失了)。所以你需要做的就是像这样添加 GL 库:-lGL。即使您已经拥有-lGL,它也无法工作的原因是您需要在.cpp 文件之后移动库标志。所以这应该有效:

 g++ -Wall -o cube main.cpp imageloader.cpp -lGL -lglut -lGLU  

如果您有类似的错误,请尝试添加标志。

【讨论】:

以上是关于对符号 glTexImage2D 的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

对 glew 的未定义引用 [重复]

对符号“sem_close@@GLIBC_2.2.5”的未定义引用

对“imp____glewEnableVertexAttribArray”的未定义引用

链接器错误:未定义对符号“glOrtho”的引用

Android Native:CMake链接错误:GL函数的未定义引用 - 即使包含和链接了EGL和GLESv3

嵌入式 C/C++:现有符号的未定义引用