导航:首页 > 操作系统 > cflagslinux

cflagslinux

发布时间:2023-12-15 14:03:58

linux 0.11内核编译错误记录

现象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/:"w{2}"(,"w{2}") )/:) /g' {} ; 其中's/:"w{2}"(,"w{2}") /:/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安装的时候CC, CFLAGS, CPPFLAGS, FC, FFLAGS, CXX都是干什么的

CC一般赋值为编译器命令路径
CFLAGS赋值为编译选项

❸ makefile的选项CFLAGS,CPPFLAGS,LDFLAGS和LIBS的区别

看看如下选项:

LDFLAGS = -L/var/xxx/lib -L/opt/MySQL/lib

LIBS = -lmysqlclient -liconv

这就明白了。LDFLAGS告诉链接器从哪里寻找库文件,LIBS告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的值互换,也没有问题。

说到这里,进一步说说LDFLAGS指定-L虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给"-Wl,R"

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

如 果在执行./configure以前设置环境变量export LDFLAGS="-L/var/xxx/lib
-L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib"
,注意设置环境变量等号两边不可以有空格,而且要加上引号哦(shell的用法)。那么执行configure以后,Makefile将会设置这个选项,
链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。

PS:-Wl,R在GraphicsMagick环境下,用为-R, 也就是LDFLAGS = -L/var/xxx/lib -R/var/xxx/lib

CFLAGS 或 CPPFLAGS的用法

CPPFLAGS='-I/usr/local/libjpeg/include -I/usr/local/libpng/include'

阅读全文

与cflagslinux相关的资料

热点内容
压缩机90兆帕 浏览:928
程序员调侃语句 浏览:579
不是php函数的是 浏览:998
压缩文件好处 浏览:785
3d266期神童三胆计算法 浏览:189
通过爱思助手怎么下载app 浏览:323
vi命令将文件创在桌面上 浏览:923
程序员做竞价 浏览:696
江苏中小学编程纳入课程 浏览:730
单纯形法包括动态规划算法 浏览:951
cpdf百度网盘 浏览:671
综合布线工程中配线架的算法 浏览:925
单片机硕士论文 浏览:329
股票预测算法现状 浏览:430
程序员三高 浏览:181
pythonfiddle 浏览:216
韩信分油总共有几种算法 浏览:941
程序员思维方案 浏览:970
编译环境要装c盘吗 浏览:650
单片机生成pwm 浏览:206