linux头文件stdarg.h,fatal error: stdarg.h: No such file or directory

今天学习C的库函数,到可变参数部分,使用gcc编译一个简单的程序发现编译报错,代码如下:

#include

#include

double sum(int lim, ...);

int main(void) {

double s, t;

s = sum(3, 1.0, 2.02, 3.123);

t = sum(8, 2.9, 9.1, 2.2, 4.1, 99.2, 43.2, 54.1, 9.0);

printf("sum of s is %g\nsum of t is %g\n", s, t);

}

double sum(int lim, ...) {

va_list ap;

double sum = 0;

int i;

va_start(ap, lim);

for (i=0; i

sum += va_arg(ap, double);

va_end(ap);

return sum;

}

错误如下:fatal error: stdarg.h: No such file or directory,头文件不存在,很奇怪,去找了一下 /usr/include 目录确实没有这个文件,用find查找竟然也没发现这个文件,难道系统没有这个文件?不可能的啊。(是find 的时候打错名字了。。。真是见鬼,闹腾到今天才发现)

实际上系统是有这个文件的,不过不在 include 目录下,在 /usr/lib/gcc/x86_64-redhat-Linux/4.8.2/include/ 这个目录下是有这个文件的。这是我的CentOS下的路径,可能其他发行版的路径名略有不同。

为了让gcc找到这个头文件,我们可以拷贝一份到 /usr/include 下,但是更好的方法是做一个软连接:

sudo ln -s /usr/lib/gcc/x86_64-redhat-Linux/4.8.2/include/stdargs.h /usr/include/stdargs.h

在编译就没问题了。

软连接在这种情况下很有用的工具,很多编译器找不到共享目标啊,找不到头文件啊,都给个软连接可以解决。

== added

前面讲到的find 查找文件,因为centos 7没有了locate命令(locate真的很方便,只是要维护一个db确实比较不讨人喜欢就被砍了吧),查找文件都是用find,常用的方法如下:

find -L /usr -name "*file-to-find*" -type f

-L 表示 follow symbol link, -type f表示输出文件,不输出目录,也可以 -type d 只输出目录。

查找的名字,可以用双引号括起来,加通配符。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部