在使用相同命令编译的程序中,出现对glutInit的未定义引用错误,而该程序在仅仅两周前是可以编译通过的。

14 浏览
0 Comments

在使用相同命令编译的程序中,出现对glutInit的未定义引用错误,而该程序在仅仅两周前是可以编译通过的。

我的Ubuntu安装最近崩溃了,我现在正在重新构建一切。\n我有一个我知道最近编译并且与相同的命令一起正常工作的文件。这是一个基于OpenGL-glut的简单程序。\n它使用以下命令进行编译:\ng++ -lGL -lGLU -lglut -I . *.cpp\n这会产生以下错误代码:\n

main.cpp:(.text+0x2de): 对`glGetDoublev'的引用未定义
/tmp/cc9vO929.o: 在函数`tbVisuTransform()'中:
main.cpp:(.text+0x2fd): 对`glMultMatrixd'的引用未定义
/tmp/cc9vO929.o: 在函数`tbMotionFunc(int, int)'中:
main.cpp:(.text+0x4f5): 对`glLoadIdentity'的引用未定义
main.cpp:(.text+0x523): 对`glRotatef'的引用未定义
main.cpp:(.text+0x52d): 对`glMultMatrixd'的引用未定义
main.cpp:(.text+0x53c): 对`glGetDoublev'的引用未定义
main.cpp:(.text+0x649): 对`glLoadIdentity'的引用未定义
main.cpp:(.text+0x665): 对`glRotatef'的引用未定义
main.cpp:(.text+0x66f): 对`glMultMatrixd'的引用未定义
main.cpp:(.text+0x67e): 对`glGetDoublev'的引用未定义
main.cpp:(.text+0x724): 对`glutPostRedisplay'的引用未定义
/tmp/cc9vO929.o: 在函数`tbRotate(double, double, double, double)'中:
main.cpp:(.text+0x78c): 对`glLoadIdentity'的引用未定义
main.cpp:(.text+0x7b5): 对`glRotatef'的引用未定义
main.cpp:(.text+0x7bf): 对`glMultMatrixd'的引用未定义
main.cpp:(.text+0x7ce): 对`glGetDoublev'的引用未定义

\n这样持续了一段时间。\n我已经安装了构建必需品和freeglut。\nsudo apt-get install build-essential\nsudo apt-get install freeglut3 freeglut3-dev\n有人有什么想法吗?\n我已经尝试了他们在这里说的:\nError with GLUT compile in ubuntu\n请注意,我从Ubuntu 12.04升级到了14.04,如果这有关系的话。

0
0 Comments

这个问题的出现原因是Ubuntu在Oneiric(Ubuntu 11.10)及以后的版本中改变了默认的链接策略。根据提供的链接,Oneiric及以后的版本默认使用--as-needed标志,因此在Ubuntu中库的顺序确实很重要。这些链接主要关注的是11.10之前和之后的差异,而我从12.04升级到了14.04,所以这些链接是否仍然相关呢?

好的,我明白了,应该将*cpp放在其余内容的前面,而不是后面。

0