我的编译器出现以下错误:
g++ -c -m32 tracecone.cpp -I/usr/X11R6/include -I/usr/X11/include/GL -I/Users/owner/Documents/raytrace/Graphics -I../RayTrace -I/Users/owner/Documents/raytrace/Graphics -I/Users/owner/Documents/raytrace/VrMath -I/Users/owner/Documents/raytrace/OpenglRender -I/Users/owner/Documents/raytrace/RaytraceMgr
g++ -o -m32 tracecone ../RayTrace/RayTraceData.o tracecone.o /Users/owner/Documents/raytrace/OpenglRender/GlutRenderer.o /Users/owner/Documents/raytrace/RaytraceMgr/SceneDescription.o -L/usr/X11/lib -L/usr/X11R6/lib -L/Users/owner/Documents/raytrace/Graphics -L/Users/owner/Documents/raytrace/VrMath -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXext -lXmu -lXt -lXi -lSM -lICE -lraygraph -lvrmath
i686-apple-darwin11-llvm-g++-4.2: tracecone: No such file or directory
make: *** [tracecone] Error 1
但是,我不确定它所说的文件不存在。这是tracecone
吗?或其中一个库文件?无论哪种方式,它看起来都应该是正确的。
什么可能导致此错误?
这是我的make文件:
PROG = tracecone
RBASE= /Users/owner/Documents/raytrace
GDIR=$(RBASE)/Graphics
MDIR=$(RBASE)/VrMath
ODIR=$(RBASE)/OpenglRender
MANDIR=$(RBASE)/RaytraceMgr
CFLAGS = -w -s -O2 -ansi -DSHM
XLIBS = -lX11 -lXext -lXmu -lXext -lXmu -lXt -lXi -lSM -lICE
LIBS = -lglut -lGLU -lGL
RAYLIBS = -lraygraph -lvrmath
INCLS = -I/usr/X11R6/include -I/usr/X11/include/GL
INCL1 = -I$(GDIR) -I../RayTrace -I$(GDIR) -I$(MDIR) -I$(ODIR) -I$(MANDIR)
LIBDIR = -L/usr/X11/lib -L/usr/X11R6/lib -L$(GDIR) -L$(MDIR)
#source codes
SRCS = $(PROG).cpp
#substitute .cpp by .o to obtain object filenames
OBJS = $(SRCS:.cpp=.o)
#in ../Graphics
OBJOD = $(ODIR)/GlutRenderer.o
OBJO = GlutRenderer.o
OBJMAND = $(MANDIR)/SceneDescription.o
OBJMAN = SceneDescription.o
OBJ_temp = ../RayTrace/RayTraceData.o
#$< evaluates to the target's dependencies,
#$@ evaluates to the target
$(PROG): $(OBJS)
g++ -o -m32 $@ $(OBJ_temp) $(OBJS) $(OBJOD) $(OBJMAND) $(LIBDIR) $(LIBS) $(XLIBS) $(RAYLIBS)
$(OBJS):
g++ -c -m32 $*.cpp $(INCLS) $(INCL1)
$(OBJ1):
cd $(GDIR); g++ -m32 -c $*.cpp $(INCLS)
$(OBJM):
cd $(MDIR); g++ -m32 -c $*.cpp $(INCLS)
$(OBJO):
cd $(ODIR); g++ -m32 -c $*.cpp $(INCLS)
$(OBJMAN):
cd $(MANDIR); g++ -m32 -c $*.cpp $(INCLS)
clean:
rm $(OBJS)
clean1:
rm $(OBJD1)
提前致谢。
答案 0 :(得分:2)
您应该将目标放在-o标志之后:
g++ -o $@ -m32 ...
标记-o表示输出,如果是g++ -o tracecone ...
,您将tracecone
指定为输出,但如果g++ -o -m32 tracecone ...
您指定-m32
作为输出,tracecone
作为目标文件之一。并且g ++说没有这样的目标文件,因为实际上没有这样的文件。