使用libm时,对所有内容的未定义引用

时间:2014-03-19 10:36:58

标签: c++ ubuntu clang libm

我有一个程序在C ++中使用标准数学函数。在我的Mac上,它使用clang链接很好,甚至没有使用-lm。但是,在Ubuntu上,也使用了clang,在将-lm添加到我的命令行后,我得到了对一切的未定义引用。我的意思是一切。

我的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 $@ $<

1 个答案:

答案 0 :(得分:0)

根据评论,在编译C ++时,您需要使用正确的编译器。 C ++ clang++

C和C ++编译器通常是相同的基本程序,但是例如调用它们。 clang或clang ++使用正确的目标语言选项调用它们。

您看到的错误很可能是程序未与正确的运行时库链接的结果。