0
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 变量。

会是什么呢?

我正在使用生成文件。我正在执行“make lexanc”我的 makefile 看起来像这样:

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
...

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

4

2 回答 2

6

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

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已移至最后。

于 2013-02-06T00:03:48.503 回答
2

你包括math.h吗?尝试将-Wall -ansi -pedantic命令行参数添加到 C 编译器。CFLAGS为此目的,通常有一个地方的定义。

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

于 2013-02-05T23:56:49.917 回答