使用libm时对所有内容的未定义引用 我用C++中的标准数学函数编写程序。在我的Mac上,它使用叮当声链接很好,甚至不用-lm。然而,在Ubuntu上,也使用了clang,在我的命令行中添加了-lm之后,我得到了对所有内容的未定义引用。我指的是一切

使用libm时对所有内容的未定义引用 我用C++中的标准数学函数编写程序。在我的Mac上,它使用叮当声链接很好,甚至不用-lm。然而,在Ubuntu上,也使用了clang,在我的命令行中添加了-lm之后,我得到了对所有内容的未定义引用。我指的是一切,c++,ubuntu,clang,libm,C++,Ubuntu,Clang,Libm,我的Makefile如下所示: CC = clang CFLAGS = -fmessage-length=0 -std=c++11 -pipe LDFLAGS = -pipe LDLIBS = -lpng -lpthread -lm OBJS = Colour.o GraphicsLibrary/SimpleVector.o Camera.o Ray.o \ Material.o SceneObject.o Sphere.o Plane.o Polygon.o PolygonPatch.o Co

我的Makefile如下所示:

CC = clang
CFLAGS = -fmessage-length=0 -std=c++11 -pipe
LDFLAGS = -pipe
LDLIBS = -lpng -lpthread -lm
OBJS = Colour.o GraphicsLibrary/SimpleVector.o Camera.o Ray.o \
Material.o SceneObject.o Sphere.o Plane.o Polygon.o PolygonPatch.o Cone.o \
Cylinder.o Light.o Scene.o SimpleScene.o BoxedScene.o RTreeScene.o AABB.o Main.o \
AFF/parse.o AFF/texture.o AFF/animation.o AFF/quat.o AFF/kbsplpos.o \
AFF/kbsplrot.o
TARGET = straylight


######################
# ------------------ #
# Top level targets. #
# ------------------ #
######################

all: ${TARGET}

clean:
    rm -v ${OBJS} ${TARGET}

debug:
    ${MAKE} EXTRA_C_FLAGS="-g3 -pg" EXTRA_LD_FLAGS="-g3 -pg"

optimized:
    ${MAKE} EXTRA_C_FLAGS="-O3" EXTRA_LD_FLAGS="-O3"

######################
# ------------------ #
# Low level targets. #
# ------------------ #
######################

${TARGET}: ${OBJS}
    ${CC} ${LDFLAGS} ${EXTRA_LD_FLAGS} -o ${TARGET} $^ ${LDLIBS} 

%.o: %.C %.h Makefile
    ${CC} ${CFLAGS} ${EXTRA_C_FLAGS} -c -o $@ $<
CC=clang
CFLAGS=-fmessage length=0-std=c++11-pipe
LDFLAGS=-pipe
LDLIBS=-lpng-lpthread-lm
OBJS=color.o GraphicsLibrary/SimpleVector.o Camera.o Ray.o\
材质.o场景对象.o球体.o平面.o多边形.o多边形面片.o圆锥体.o\
圆柱体。o灯光。o场景。o简单场景。o盒式场景。o RTreeScene。o AABB。o主场景。o\
AFF/parse.o AFF/texture.o AFF/animation.o AFF/quat.o AFF/kbsplpos.o\
楼面竣工标高/KBSPLOT.o
目标=直射光
######################
# ------------------ #
#最高级别的目标#
# ------------------ #
######################
全部:${TARGET}
清洁:
rm-v${OBJS}${TARGET}
调试:
${MAKE}EXTRA_C_FLAGS=“-g3-pg”EXTRA_LD_FLAGS=“-g3-pg”
优化:
${MAKE}EXTRA_C_FLAGS=“-O3”EXTRA_LD_FLAGS=“-O3”
######################
# ------------------ #
#低级别目标#
# ------------------ #
######################
${TARGET}:${OBJS}
${CC}${LDFLAGS}${EXTRA_LD_FLAGS}-o${TARGET}$^${LDLIBS}
%.o:%.C%.h生成文件
${CC}${CFLAGS}${EXTRA_C_FLAGS}-C-o$@$<

> > P>根据注释,编译C++时,需要使用正确的编译器。代码> C+++/<代码> C++ >

<>通常C和C++编译器是相同的基本程序,但调用它们如CLAN或CLAN+++,用目标语言的正确选项调用它们。
<>你可能看到的错误是程序没有链接到正确的运行库。

如果你想编译C++代码,使用C++编译器:我很困惑。问题最初是用C++来标记的,但是@ SEHE将它改成C++。编译器使用的是CLAG(C)而不是CLAN+++(C++),但是CFLAGS有<代码> -STD= C++ 11 。我们使用的是哪种语言?请决定使用哪种编译器/语言。现在你完全把事情搞混了。@harmic哇。谁用C++来C++?!!!!思维Broui正试图编译C++。使用CC=clang++解决了这个问题。没有意识到C++有不同的可执行文件。谢谢