包含头文件,但仍然无法调用函数

Posted

技术标签:

【中文标题】包含头文件,但仍然无法调用函数【英文标题】:Header files are included, but still cannot call the functions 【发布时间】:2012-11-19 05:23:13 【问题描述】:

我正在尝试在 ubuntu12.04 下用 c++ 编写一个绘图程序。 OpenGL 应用在我的代码(cc.cpp)中。我已经包含了必要的头文件,但是仍然无法使用openGL功能。

这是包含代码。

#include <GL/freeglut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <math.h>
#include <cstdlib> 

当我在终端中运行g++ cc.cpp 时,终端会显示:

/tmp/ccsiISvK.o: In function `initGL()':
cc.cpp:(.text+0xe): undefined reference to `glMatrixMode'
cc.cpp:(.text+0x13): undefined reference to `glLoadIdentity'
cc.cpp:(.text+0x49): undefined reference to `glOrtho'
cc.cpp:(.text+0x55): undefined reference to `glMatrixMode'
cc.cpp:(.text+0x5a): undefined reference to `glLoadIdentity'
cc.cpp:(.text+0x82): undefined reference to `glClearColor'
cc.cpp:(.text+0x87): undefined reference to `glGetError'
cc.cpp:(.text+0x9b): undefined reference to `gluErrorString'
/tmp/ccsiISvK.o: In function `render()':
cc.cpp:(.text+0x124): undefined reference to `glClear'
cc.cpp:(.text+0x130): undefined reference to `glBegin'
cc.cpp:(.text+0x14f): undefined reference to `glColor3f'
cc.cpp:(.text+0x18b): undefined reference to `glVertex2f'
cc.cpp:(.text+0x1b0): undefined reference to `glEnd'
cc.cpp:(.text+0x1b5): undefined reference to `glutSwapBuffers'
/tmp/ccsiISvK.o: In function `runMainLoop(int)':
cc.cpp:(.text+0x1f7): undefined reference to `glutTimerFunc'
/tmp/ccsiISvK.o: In function `main':
cc.cpp:(.text+0x214): undefined reference to `glutInit'
cc.cpp:(.text+0x228): undefined reference to `glutInitContextVersion'
cc.cpp:(.text+0x234): undefined reference to `glutInitDisplayMode'
cc.cpp:(.text+0x248): undefined reference to `glutInitWindowSize'
cc.cpp:(.text+0x254): undefined reference to `glutCreateWindow'
cc.cpp:(.text+0x27f): undefined reference to `glutDisplayFunc'
cc.cpp:(.text+0x29b): undefined reference to `glutTimerFunc'
cc.cpp:(.text+0x2a0): undefined reference to `glutMainLoop'
collect2: ld returned 1 exit status 

谁能解决这个问题?我会很感激的!

【问题讨论】:

欢迎来到超级用户!我们是计算机硬件/软件问题专业人士的网站。编程超出了我们在常见问题解答中定义的范围,但我已投票将其移至程序员站点 ***。也请不要在那里发帖,这个问题会自然而然地移动 头文件与链接器无关。 【参考方案1】:

您需要将标志添加到g++ 以使用-l 选项包含必要的库。 可能类似于 here 或 here 的显示方式

试试这个 -

g++ cc.cpp -lGL -lglut

【讨论】:

以上是关于包含头文件,但仍然无法调用函数的主要内容,如果未能解决你的问题,请参考以下文章

为啥不包含头文件却可以调用函数,谁来解释

使用makefile时,会找到linux头文件,但是当调用头文件中的函数时,它会隐式声明它们

c语言中,如何在头文件中调用某个源文件的函数??

C语言函数的声明是在哪个位置声明

一个c语言工程中可以有几个头文件,两个文件间函数调用其中之一要是头文件吗?

Arduino中调用.c文件中的函数报错