【发布时间】:2016-02-18 22:26:48
【问题描述】:
我有很多问题,似乎无法理解发生了什么。我正在尝试从Learn C The Hard Way 学习C,并且我正在尝试编译first exercise。当我运行 make 时,我遇到了一个大问题
cc ex1.c -o ex1
ex1.c: In function ‘main’:
ex1.c:3:5: warning: implicit declaration of function ‘put’ [-Wimplicit-function-declaration]
put("Hello world.");
^
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/5.3.1/../../../libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'ex1' failed
make: *** [ex1] Error 1
任何帮助都会很棒
【问题讨论】:
-
put()-->puts(). -
隐式声明警告意味着编译器在任何地方都找不到名为“put”的函数,并会尝试为您补上一个。这通常很糟糕,因为它构成的几乎永远不会正确。有时您只是输入了错误的名称,就像您的情况一样。正如其他人提到的,您输入的是“put”而不是“puts”。
-
@bruceg :即便如此,如果你看一下c.learncodethehardway.org/book/ex1.html 的练习,你可以看到作者故意省略了stdio.h 头文件来强制这个警告。我认为这种教学方式没有多大意义——尤其是因为他没有继续解释如何解决它,或者它为什么重要。
-
"/usr/bin/ld: 在搜索 -lc 时跳过不兼容的 /lib/libc.so" - 这是非常不寻常的并且可能是一个主要问题。