未定义的'pow'引用,即使-lm是一个编译标志.[C]

BSu*_*ull 3 c gcc compiler-errors cc

任何原因

cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN
Run Code Online (Sandbox Code Playgroud)

使用代码会产生错误math.h吗?是否有可能GCC版本4.0.3(文档工作版本)和版本4.6.3(我当前版本)之间存在差异?

makefileasm.c@ https://gist.github.com/3801291

这是在ubuntu 12.04上

我的终端输出是要点中的注释.

Rob*_*obᵩ 8

代替

cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c
Run Code Online (Sandbox Code Playgroud)

尝试:

cc -g -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c -lm
Run Code Online (Sandbox Code Playgroud)

当链接器搜索库时,它链接在包含先前未定义符号的定义的模块中.

如果链接器-lm之前搜索过foo.o,那么pow()尚未定义.相反,如果foo.o是第一个,它取消定义pow(),然后-lm可以解决.


编辑:要在您的 makefile中完成此建议,进行以下更改:

CFLAGS=-g -DBLITZ_HOST_IS_LITTLE_ENDIAN
LDLIBS=-lm

...

asm: asm.c
        $(CC) $(CFLAGS) asm.c $(LDLIBS) -o asm
Run Code Online (Sandbox Code Playgroud)