Linux编译错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux编译错误相关的知识,希望对你有一定的参考价值。

在Linux系统下编译时出现了
make: Warning: File `main.f' has modification time 7.1 s in the future
make: warning: Clock skew detected. Your build may be incomplete.
的错误,各位大侠,是不是这时候再修改文件就不能编译通过了,怎么才能解决呢?

你的系统时间不对,makefile生成的时间比你make的时候的时间还要晚,这就造成不符合事实的情况
修改:打开Makefile,任意行尾端加上一个空格,保存即可
或者修改你的电脑的系统时间,使其晚于Makefile生成的时间.
望采纳!
参考技术A 你的系统时间不对,makefile生成的时间比你make的时候的时间还要晚,这就造成不符合事实的情况 修改:打开Makefile,任意行尾端加上一个空格,保存即可 或者修改你的电脑的系统时间,使其晚于Makefile生成的时间. 望采纳! 参考技术B find . -type f | xargs -n 5 touch
make clean
make
参考技术C 已经有生成文件了

Linux 0.11内核编译错误记录

参考技术A

现象1: 提示gas gld 比识别
措施: gnu编译器发展到后来,越来越流行,更多使用别名为 as ld gcc等.

现象2: 提示字节对齐需要是 2的倍数
措施: 具体解决方法: 利用命令 sed -i \'s/align 2/align 4/g\' filename 替换align 2 为 align 4(align 3 替换为 align 8)
sed -i \'s/align 2/align 4/g\' boot/head.s
sed -i \'s/align 3/align 8/g\' boot/head.s

现象3: -fcombine-regs -mstring-insns选项不识别
措施: 此两个选项已经过时,直接去掉即可

现象4: warning 特别多
措施: 将-Wall 替换为 -w

现象5: __stack_chk_fail 未定义
措施: 去网上搜了一下,在Makefile中的$(CFLAGS)后面加上-fno-stack-protector,即不需要栈保护

现象6: main.c 中_syscall0重复定义
措施: main.c static inline _syscall0(int, fork) 去掉static即可

现象7: 提示内嵌汇编不符合语法限制
措施: 类似的问题在后面编译中出现好多,C内嵌汇编的格式 asm (汇编语句:输入寄存器:输出寄存器:可能被修改的寄存器),最新的GCC规定 输入或输出寄存器不能出现在可能被修改的寄存器中,目前看到网上的方法是把所有类似问题的可能被修改的寄存器全部删掉 解决方案:find -type f -exec sed -i \'s/:"\\w2"(,"\\w2") )/:) /g\' ; 其中\'s/:"\\w2"(,"\\w2") /:/g\'

现象8: 在 control.c 中清楚定义了 static unsigned char attr = 0x70 ,而在链接 control.o 时,却爆出 attr未定义。
措施: nm -C control.o 查看其符号,发现attr确实处于未定义状态。故单独编译一个小程序定义静态变量,查看其 .o 文件中,发现静态变量定义正常。故考虑为编译选项差异导致,最终发现因为 -O 编译优化选项导致,目前处理方式是去掉该选项。

现象9: build.c:(.text+0xde): undefined reference to `MAJOR\'
措施: 通过分析编译打印信息,发现编译时没有加入头文件路径 -Iinclude

现象10: fs/fs.o: In function check_disk_change\':(.text+0x1b2f): undefined reference to invalidate_buffers\'
措施: 查找发现此函数定义在buffer.c 中,且为内联函数, 故尝试将其更改为普通函数, 然后编译通过.

现象11: 编译 build.c 时报错:/usr/include/i386-linux -gnu/bits/stdio2.h:57:8: error: unknown type name ‘__gnuc_va_list’
措施: 分析发现时此系列错误均由 -Iinclude 选项导致, 而该选项在 想象9 中加入, 故考虑去掉该选项, 直接在build.c 中加入 MAJOR 宏定义.

以上是关于Linux编译错误的主要内容,如果未能解决你的问题,请参考以下文章

linux编译内核时出现错误,求解

Kali Linux中,make编译时出现错误怎么解决?

Linux 0.11内核编译错误记录

linux中的c++编译错误

linux内核编译错误

C++ Linux 到 Windows 交叉编译错误