私は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の2つのヘッダーファイルがあります。前述したように、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);
}
これが明確になることを願っています。