C 未定义对'的引用;战俘';即使-lm是一个编译标志。[丙]

C 未定义对'的引用;战俘';即使-lm是一个编译标志。[丙],c,gcc,compiler-errors,cc,C,Gcc,Compiler Errors,Cc,任何理由 cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN 使用math.h会产生代码错误吗?GCC版本4.0.3(记录在案的工作版本)和版本4.6.3(我的当前版本)之间是否可能存在差异 makefile和asm.c@ 这是在ubuntu 12.04上 我的终端输出是要点中的注释。而不是 cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c 尝试: 链接器搜索库时,会链接包含以前未定义符号定义的模块 如果链接器在foo.o

任何理由

cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN
使用
math.h
会产生代码错误吗?GCC版本4.0.3(记录在案的工作版本)和版本4.6.3(我的当前版本)之间是否可能存在差异

makefile
asm.c
@

这是在ubuntu 12.04上

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

而不是

cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c
尝试:

链接器搜索库时,会链接包含以前未定义符号定义的模块

如果链接器在
foo.o
之前搜索
-lm
,则
pow()
尚未定义。相反,如果
foo.o
排在第一位,它将取消定义
pow()
,然后
-lm
可以解析


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

CFLAGS=-g -DBLITZ_HOST_IS_LITTLE_ENDIAN
LDLIBS=-lm

...

asm: asm.c
        $(CC) $(CFLAGS) asm.c $(LDLIBS) -o asm

我最近在使用自动生成器时遇到了这个问题,即

问题是Ubuntu12.04中的gcc在默认情况下根据需要与-Wl,--链接。 在我的例子中,项目使用的是autotools,这意味着我太懒了,无法编写任何东西来修改编译顺序。相反,根据需要修改标志修复了问题

-gabriel_LDFLAGS = $(GLIB2_LIBS) $(DBUS_LIBS) -lssh
+gabriel_LDFLAGS = -Wl,--no-as-needed $(GLIB2_LIBS) $(DBUS_LIBS) -lssh
有关完整信息,您可以在中检查修复提交


您可以看一看,也可以看一看。

然后告诉我们更多关于您的编译环境、精确的整个命令行和一个示例程序的信息。我刚刚注意到makefile仍然将-lm放在asm.c之前,所以我现在将尝试一下,看看它是否有效。非常感谢。谢谢不过,我确实遇到了另一个错误。应该在代码文件之前还是之后添加-m32?让我们来看看
-gabriel_LDFLAGS = $(GLIB2_LIBS) $(DBUS_LIBS) -lssh
+gabriel_LDFLAGS = -Wl,--no-as-needed $(GLIB2_LIBS) $(DBUS_LIBS) -lssh