我在linux上进行make编译时出现问题....获取有关未定义引用的错误。 简而言之,我们使用GUI设计师FLUID。 FLUID的代码在MyProjectGUI类中。我在FLUID之外写了一个回调函数,它是从MyProjectGUI的函数中调用的。
MyProjectGUI.h 包含回调函数头:
#include "students/stu_callbacks.h"
的 MyProjectGUI.cxx :
#include "MyProjectGUI.h"
....
void MyProjectGUI::somecallback_i([args])
{ ...
brandNewCallback();
...
}
在“students / stu_callbacks.h ”中:
#include "../main_utils.h"
void brandNewCallback();
然后在“students / stu_callbacks.cpp ”中:
#include "stu_callbacks.h"
void brandNewCallback()
{ ...stuffs...
}
Makefile 我用过:
VXLDIR = [....]
CFLAGS = [...VXL header paths...] -Wno-deprecated -DJPEG_LIB_VERSION=80
CC = g++
#fltk library paths and libraries
FLTKLDFLAGS = -L/local/lib -L/usr/lib/x86_64-linux-gnu/ -Wl,-rpath,/local/lib -lfltk_gl -lGLU -lGL -lfltk -L/usr/X11R6/lib -lpthread -lm -lXext -lX11 -lsupc++
#vxl library paths and libraries
VXLLDFLAGS = -L$(VXLDIR)/bin/lib -lvil -lvnl_algo -lvnl_io -lvnl -lv3p_netlib -lvcl -lvul -lpng -ltiff -lopenjpeg2 -lgeotiff
LDFLAGS = -lstdc++ $(FLTKLDFLAGS) $(VXLLDFLAGS)
FLUID = fluid
%.o: %.cxx
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
%.cxx: %.fl
$(FLUID) -c $<
BASIC_OBJ = gl/glutils.o gl/Texture.o main.o file/load_image.o
IMDRAW_OBJ = [...imdraw...]
UI_OBJ = MyProjectUI.o
UI_CPP = MyProjectUI.cxx MyProjectUI.h
GRAPHIC_OBJ = graphics/graphics.o
STUDENT_OBJ = graphics/graphics_algorithm.o
imdraw-code/myproject: $(UI_CPP) $(BASIC_OBJ) $(UI_OBJ) $(STUDENT_OBJ) $(GRAPHIC_OBJ) $(IMDRAW_OBJ)
$(CC) -o ../bin/viscomp $(BASIC_OBJ) $(UI_OBJ) $(GRAPHIC_OBJ) $(IMDRAW_OBJ) $(STUDENT_OBJ) $(LDFLAGS)
::brandNewCallback();
,仍然是同样的错误。我不明白我怎么也不能让它像它一样工作,而且它会破坏我的黑客行为。昨晚我已经花了5个小时尝试/谷歌搜索...所以任何帮助将不胜感激!
答案 0 :(得分:1)
您的规则%.o: %.cxx
指示制作如何编译扩展名为.cxx
的源文件。但是,你的
自己的C ++源文件是students/stu_callbacks.cpp
。您没有提供规则来从.cpp文件中创建目标文件,或者从students / stu_callbacks.cpp文件中创建目标文件。因此,您的stu_callbacks没有被链接,并且链接器自然会抱怨。
头文件的问题类似 - C ++编译器可能没有包含路径集。