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