任何原因cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN会在使用math.h的代码时产生错误? cc 4.0.3(记录的工作版本)和4.6.3(我当前的版本)有什么区别吗?即使-lm是编译标志,仍未定义对'pow'的引用。 [C]
和makefile asm.c https://gist.github.com/3801291
这是在Ubuntu 12.04
我端子输出为要旨的注释。
任何原因cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN会在使用math.h的代码时产生错误? cc 4.0.3(记录的工作版本)和4.6.3(我当前的版本)有什么区别吗?即使-lm是编译标志,仍未定义对'pow'的引用。 [C]
和makefile asm.c https://gist.github.com/3801291
这是在Ubuntu 12.04
我端子输出为要旨的注释。
而不是
cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c
尝试:
cc -g -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c -lm
当链接器搜索库,它连接在包含了以前未定义的符号定义模块。
如果链接器在foo.o
之前搜索-lm
,则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
我最近挨使用自动生成器,即drone.io这个问题。
问题是Ubuntu 12.04中的gcc默认链接了-Wl, - 根据需要。 在我的情况下,该项目使用autotools,这意味着我懒得写任何东西来修改编译顺序。相反,修改根据需要标志解决了问题。
-gabriel_LDFLAGS = $(GLIB2_LIBS) $(DBUS_LIBS) -lssh
+gabriel_LDFLAGS = -Wl,--no-as-needed $(GLIB2_LIBS) $(DBUS_LIBS) -lssh
对于完全的信息,您可以检查固定犯https://bitbucket.org/kikeenrique/gabriel/commits/f08eefdca3f7bb90f48f5a6fbfc8839422572508
你可以看看to the log with errors BEFORE applying the fix,你也可以看看to the log without errors AFTER applying the fix。
我试过了,仍然没有工作。 :/ – BSull
然后告诉我们更多关于你的编译环境,精确的* entire *命令行和一个示例程序。 –
而你看到的确切的错误信息。 –