1

我的编译器出现以下错误:

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?或库文件之一?不管怎样,看起来一切都在它应该在的地方。

什么可能导致此错误?

这是我的制作文件:

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) 

提前致谢。

4

1 回答 1

2

您应该将目标放在 -o 标志之后: g++ -o $@ -m32 ...
标志 -o 表示输出,如果g++ -o tracecone ...您指定tracecone为输出,但如果g++ -o -m32 tracecone ...您指定-m32为输出和tracecone目标文件之一。而 g++ 说没有这样的目标文件,因为实际上没有这样的文件。

于 2013-04-22T05:40:30.257 回答