c语言 - 编译器说即使我与 -lm 链接,pow 也是未定义的,但在以下情况下编译


value *= pow(10, 3); // this one compiles
value *= pow(10, aVar); // this one produces this error:
                         //Number.c:(.text+0x469): undefined reference to `pow'

aVar是一个int变量。

可能是什么?

我正在使用makefile。我正在练习"make lexanc"我的生成文件如下:

lexanc:  lexandr.o lexanc.o scanner.o printtoken.o token.h lexan.h Number.o
    cc -o lexanc -lm lexandr.o lexanc.o scanner.o printtoken.o Number.o
...
Number.o: Number.c Number.h lexan.h
    cc -c Number.c
lexanc.o: lexanc.c token.h lexan.h Number.h
    cc -c lexanc.c
...

我的抄送版本是:laygr@xxx$cc--版本cc(Ubuntu/Linaro 4.6.3-1ubuntu5(4.6.3

库应该位于编译选项中的所有对象之后。更改为:

lexanc:  lexandr.o lexanc.o scanner.o printtoken.o token.h lexan.h Number.o
    cc -o lexanc lexandr.o lexanc.o scanner.o printtoken.o Number.o -lm

注释-lm已移动到末尾。

您是否包括math.h?尝试将-Wall -ansi -pedantic作为命令行参数添加到C编译器中。通常在某个地方有CFLAGS的定义

编辑
这其实是一个我完全忘记的常见问题。将-lm移动到参数列表的末尾。更具体地说,它需要在所有对象之后。查看此问题的答案以了解更多详细信息。

最新更新