编译器说 pow 是未定义的,即使我正在链接 -lm,但编译时

标签 c compiler-construction linker math.h

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 是一个整型变量。

它会是什么?

我正在使用生成文件。 我正在执行“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$ 抄送 --version 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 已移至末尾。

关于编译器说 pow 是未定义的,即使我正在链接 -lm,但编译时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719128/

相关文章:

java - 将可执行文件链接到代码块

c++ - 将文件从另一个 .vcproj 链接/包含到现有 .vcproj

c - 带结构体参数的Linux内核系统调用实现

c - linux内核如何检查是否设置了粘滞位

c - 链接器如何创建可执行文件并链接 C 关键字

linux - 使用不同的 glibc 库在 Linux 中编译 C 程序

c - 将多个字符串存储在C中的char数组中

ios - NSUserDefaults 给声明阴影局部变量警告

java - Java 规范中的方法类型推断

c++ - 无法链接 ".o"目标文件