linux3.8.13编译内核的小问题

本文最后更新于:2 年前

设备环境

Ubuntu 64位 16.04

编译内核时出现的问题

最近在做操作系统的实验的第一个作业,编译内核。下载的是linux3.8.13的内核文件。

在基本的启动内核配置程序之后

1
#make bzImage

生成内核的镜像文件时发生了以下错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
lib/mpi/generic_mpih-mul1.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/generic_mpih-mul1.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/generic_mpih-mul1.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/generic_mpih-mul1.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/generic_mpih-mul2.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/generic_mpih-mul2.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/generic_mpih-mul2.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/generic_mpih-mul2.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/generic_mpih-mul3.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/generic_mpih-mul3.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/generic_mpih-mul3.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/generic_mpih-mul3.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/generic_mpih-rshift.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/generic_mpih-rshift.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/generic_mpih-rshift.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/generic_mpih-rshift.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/generic_mpih-sub1.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/generic_mpih-sub1.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/generic_mpih-sub1.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/generic_mpih-sub1.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/generic_mpih-add1.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/generic_mpih-add1.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/generic_mpih-add1.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/generic_mpih-add1.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpicoder.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpicoder.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpicoder.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpicoder.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/mpi-bit.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpi-bit.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpi-bit.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpi-bit.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/mpi-cmp.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpi-cmp.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpi-cmp.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpi-cmp.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/mpih-cmp.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/mpih-cmp.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpih-cmp.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpih-cmp.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpih-div.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/mpih-div.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpih-div.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpih-div.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpih-mul.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/mpih-mul.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpih-mul.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpih-mul.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpi-pow.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpi-pow.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpi-pow.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpi-pow.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
lib/mpi/mpiutil.o:在函数‘mpihelp_add’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67: `mpihelp_add'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:67:第一次在此定义
lib/mpi/mpiutil.o:在函数‘mpihelp_sub_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82: `mpihelp_sub_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:82:第一次在此定义
lib/mpi/mpiutil.o:在函数‘mpihelp_sub’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110: `mpihelp_sub'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:110:第一次在此定义
lib/mpi/mpiutil.o:在函数‘mpihelp_add_1’中:
/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39: `mpihelp_add_1'被多次定义
lib/mpi/generic_mpih-lshift.o:/usr/src/linux-3.8.13/lib/mpi/mpi-inline.h:39:第一次在此定义
scripts/Makefile.build:440: recipe for target 'lib/mpi/mpi.o' failed
make[2]: *** [lib/mpi/mpi.o] Error 1
scripts/Makefile.build:454: recipe for target 'lib/mpi' failed
make[1]: *** [lib/mpi] Error 2
Makefile:791: recipe for target 'lib' failed
make: *** [lib] Error 2

这个问题是卡了我稍长时间的,网上的解答很少。

其中有个方法是修改lib/mpi-inline.h 中 将extern inline修改为static inline,经测试无效,文件下定义的其他函数非static类型。
和同学交流发现他们都没出现此问题,就感觉是自己虚拟机的问题。最后发现其实是编译器版本较高,而内核版本太老,自己的ubuntu 16.04 默认的gcc是5.4版本的,将其退至4.9版本即可顺利编译。

1
2
3
4
$ sudo apt-get install -y gcc-4.9
$ cd /usr/bin
$ sudo rm gcc
$ sudo ln -s gcc-4.9 gcc

安装gcc4.9,再链接实现降级
最后gcc -v 检查版本号。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!