我正在使用 OpenGL 用 C/C++ 编写图形程序。我有一堆 .c 文件,现在,我正在尝试从 assignment1gui.c 中的 main.cpp 调用一个函数。老师给了我一个包含编译代码的文件。它看起来像这样:
OBJS = assignment1gui.o shadertools.o main.o
TARGET = ass1
CXX = gcc
DBFLAGS = -O0 -g3 -ggdb3 -fno-inline
WFLAGS = -Wall -ansi
GLFLAGS = `pkg-config --cflags gtk+-2.0`
LGLFLAGS = `pkg-config --libs gtk+-2.0` -lGL -lGLEW -lGLU -lglut
CXXFLAGS = $(WFLAGS) $(DFLAGS) $(GLFLAGS)
LDFLAGS = -export-dynamic -lXext -lX11 $(LGLFLAGS)
all: $(TARGET)
clean:
rm -f $(OBJS) $(TARGET)
.SUFFIXES: .cc
.cc.o:
$(CXX) -c $(CXXFLAGS) $<
.c.o:
$(CXX) -c $(CXXFLAGS) $<
$(TARGET): $(OBJS)
$(CXX) -o $(TARGET) $(OBJS) $(LDFLAGS)
我试图调用的函数是“drawPloygonLine()”。我已经在“assignment1gui.h”中声明了这一点,正如我之前提到的,定义在 main.cpp 中。
从互联网上的所有帮助中,我意识到编译代码一定有问题。但我不确定。有人可以帮我吗?
抱歉,我之前遗漏了这部分。我得到的错误是:
assignment1gui.o: In function `on_btn_color_color_set':
assignment1gui.c:(.text+0x1c): undefined reference to `drawPolygonLine'
assignment1gui.o: In function `on_rb_tool_line_toggled':
assignment1gui.c:(.text+0x8b): undefined reference to `drawPolygonLine'
assignment1gui.o: In function `on_rb_tool_circle_toggled':
assignment1gui.c:(.text+0xfc): undefined reference to `drawPolygonLine'
assignment1gui.o: In function `on_rb_tool_rect_toggled':
assignment1gui.c:(.text+0x16d): undefined reference to `drawPolygonLine'
assignment1gui.o: In function `on_rb_tool_edit_toggled':
assignment1gui.c:(.text+0x24a): undefined reference to `drawPolygonLine'
collect2: ld returned 1 exit status
make: *** [ass1] Error 1
我在文件夹中的 C/C++ 文件是 main.cpp、assignment1gui.c 和 shadertools.c。我还有两个头文件——assignment1gui.h 和 shadertools.h。如前所述,我使用 assignment1gui.h 文件来声明新函数“drawPolygonLine();”
补充:“drawPolygonLine();”的声明 现在在“main.h”中,它看起来像这样:
#ifndef MAIN_H
#define MAIN_H
extern void drawPolygonLine();
#endif /* MAIN_H */
main.cpp 和 assignment1gui.c 的开头都有"#include "main.h""。drawPolygonLine() 的定义是:
void drawPolygonLine()
{
if(option[opCount-1]==4 && drawn==false)
{
vCount++;
vertex[vCount].x=A;
vertex[vCount].y=B;
lines=lines+2;
vCount++;
vertex[vCount].x=polyX;
vertex[vCount].y=polyY;
clicks=0;
drawn=true;
}
}
函数中使用的所有变量在 main.cpp 中都是全局的。
我如何调用 drawPolygonLine() 的示例;在 assignment1gui.c 中是在这个函数中:
void on_btn_color_color_set(GtkColorButton *colorbutton, gpointer user_data)
{
drawPolygonLine();
GdkColor color;
gtk_color_button_get_color(colorbutton, &color);
printf("Color set rgb=(%i,%i,%i)\n",color.red,color.green,color.blue);
}
我希望这可以说清楚。