使用libm时,对一切都存在未定义的引用。

14 浏览
0 Comments

使用libm时,对一切都存在未定义的引用。

我有一个使用C++标准数学函数的程序。在我的Mac上,使用clang可以很好地链接,甚至不需要使用-lm。然而,在Ubuntu上,同样使用clang,在我的命令行中添加了-lm后,我遇到了对EVERYTHING的未定义引用。我的意思是真的每个东西都未定义。

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

0
0 Comments

在编译C++代码时,需要确保使用正确的编译器。对于C++代码,需要使用clang++编译器。

通常情况下,C和C++编译器是相同的基本程序,但是通过使用不同的命令clangclang++来调用它们,可以确保使用了适合目标语言的正确选项。

很可能你遇到的错误是由于程序没有与正确的运行时库链接导致的。

0