设备环境
Ubuntu 64位 16.04
编译内核时出现的问题
最近在做操作系统的实验的第一个作业,编译内核。下载的是linux3.8.13的内核文件。
在基本的启动内核配置程序之后
生成内核的镜像文件时发生了以下错误
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 检查版本号。