c++;尝试编译opengl项目时出现未定义的引用错误

c++;尝试编译opengl项目时出现未定义的引用错误,opengl,g++,linker-errors,glew,Opengl,G++,Linker Errors,Glew,我试图用g++命令编译我的c++/opengl项目。 (我需要这个,因为我想用第二个自编程序在每个目标系统上重新编译它。) 但当我执行时: g++ -Iinclude -Isrc $(pkg-config --cflags freetype2) -L/usr/X11R6/lib -L/usr/lib $(pkg-config --libs glew) -lglut $(pkg-config --libs glu) $(pkg-config --libs freetype2) main.cpp

我试图用g++命令编译我的c++/opengl项目。 (我需要这个,因为我想用第二个自编程序在每个目标系统上重新编译它。)

但当我执行时:

g++ -Iinclude -Isrc $(pkg-config --cflags freetype2) -L/usr/X11R6/lib -L/usr/lib $(pkg-config --libs glew) -lglut $(pkg-config --libs glu) $(pkg-config --libs freetype2) main.cpp  (some more source files) src/Vec4.cpp
对于gl/glu/glut/glew函数,我得到了很多“未定义的引用”,所以我想libs可能会失败:

/tmp/ccUm2dEl.o: In function `Box::render()':
Box.cpp:(.text+0x6e8): undefined reference to `glEnable'
Box.cpp:(.text+0x72c): undefined reference to `glBindTexture'
Box.cpp:(.text+0x736): undefined reference to `glBegin'
...
TextureManager.cpp:(.text+0x23b): undefined reference to `glTexParameteri'
TextureManager.cpp:(.text+0x295): undefined reference to `glTexImage2D'
collect2: ld gab 1 als Ende-Status zurück
我做了一些研究,但是根据我发现上面的命令应该是正确的。 我也检查了pkg配置调用,它们似乎可以工作。 在我尝试g++命令之前,我使用Codeblocks IDE来编译它,并且它工作正常。以下是我的设置:

编译器设置中|其他选项:

`pkg-config --cflags freetype2`
`pkg-config --libs glu`
`pkg-config --libs glew`
`pkg-config --libs freetype2`
在链接器设置中链接库:

glut
在链接器设置中其他链接器选项:

`pkg-config --cflags freetype2`
`pkg-config --libs glu`
`pkg-config --libs glew`
`pkg-config --libs freetype2`
搜索目录中|编译器:

include
src
我的系统(UbuntuPrecision):


感谢您的建议

问题很可能是您链接的顺序错误。GNU链接器希望其库的顺序与此相反,因此如果将链接器库放在命令行的最后一个位置,它应该会更好。

将文件(.cpp和.o)放在命令行链接到的库之前。我没有看到添加libGL。尝试在X11库之后添加
-lGL
。顺便说一句,libGL是通过
pkg config--libs glu
+1添加的。如果对象或库A需要B,那么A需要在命令行中的B之前添加。这适用于与
-l
链接的
.o
文件和库。库A需要B我已经注意到了,但谢谢。我把libs放在了最后,它成功了!谢谢,你救了我一天。我从来没有在其他论坛上得到过这么快的答案,看起来stackoverflow比我想象的有用得多。