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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
graphic: 0.838
other: 0.825
semantic: 0.823
device: 0.766
instruction: 0.762
assembly: 0.759
boot: 0.719
KVM: 0.711
mistranslation: 0.711
vnc: 0.679
socket: 0.666
network: 0.660
building with gcc-aarch64-linux-gnu
Hi, while trying to build qemu v2.8.0 with gcc-aarch64-linux-gnu cross-compiler I'm getting the following :
In file included from /usr/include/x86_64-linux-gnu/sys/syscall.h:31:0,
from /root/qemu/util/compatfd.c:21:
/root/qemu/util/compatfd.c: In function 'qemu_signalfd':
/root/qemu/util/compatfd.c:103:19: error: '__NR_signalfd' undeclared (first use in this function)
ret = syscall(SYS_signalfd, -1, mask, _NSIG / 8);
^
/root/qemu/util/compatfd.c:103:19: note: each undeclared identifier is reported only once for each function it appears in
/root/qemu/rules.mak:59: recipe for target 'util/compatfd.o' failed
make: *** [util/compatfd.o] Error 1
I had configured it with :
../configure --target-list=x86_64-linux-user --static --cpu=aarch64
And I'm on :
Linux ubuntu-512mb-fra1-01 4.4.0-59-generic #80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Thanks
On 20 January 2017 at 15:21, Bilal Amarni <email address hidden> wrote:
> Hi, while trying to build qemu v2.8.0 with gcc-aarch64-linux-gnu cross-
> compiler I'm getting the following :
>
>
> In file included from /usr/include/x86_64-linux-gnu/sys/syscall.h:31:0,
> from /root/qemu/util/compatfd.c:21:
> /root/qemu/util/compatfd.c: In function 'qemu_signalfd':
> /root/qemu/util/compatfd.c:103:19: error: '__NR_signalfd' undeclared (first use in this function)
> ret = syscall(SYS_signalfd, -1, mask, _NSIG / 8);
> ^
> /root/qemu/util/compatfd.c:103:19: note: each undeclared identifier is reported only once for each function it appears in
> /root/qemu/rules.mak:59: recipe for target 'util/compatfd.o' failed
> make: *** [util/compatfd.o] Error 1
You can see from the error message that the compile has
pulled in the include file /usr/include/x86_64-linux-gnu/sys/syscall.h
from the host, which is the x86-64 version. This is an
indication that either your cross compiler is broken, or
you're not using it at all.
> ../configure --target-list=x86_64-linux-user --static --cpu=aarch64
You haven't told configure to use a cross compiler at all,
so it is building with the x86 system compiler, which
doesn't work. You shouldn't need to use the --cpu argument
at all, because if you get the build to use the right
compiler it can figure that out itself. (Passing --cpu=aarch64
tells configure "ignore the fact this is an x86 compiler
and assume it's aarch64 instead", which just results in
things breaking because that assumption is wrong.)
You need to pass configure --cross-prefix=aarch64-linux-gnu-
You'll also need to ensure you have an aarch64-linux-gnu-pkg-config
and that you have cross versions of all QEMU's library
dependencies (notably zlib and glib) in the right place that
your cross-compiler can find them, and that your cross
pkg-config is set up to point to them.
On Ubuntu, you may find it easier to set up a cross-architecture
chroot and do the build in that (where it looks like a native
build). Cross-compilation of software with non-trivial
dependencies is always an enormous pain in the neck.
thanks
-- PMM
Bilal Amarni <email address hidden> writes:
> Public bug reported:
>
> Hi, while trying to build qemu v2.8.0 with gcc-aarch64-linux-gnu cross-
> compiler I'm getting the following :
>
>
> In file included from /usr/include/x86_64-linux-gnu/sys/syscall.h:31:0,
> from /root/qemu/util/compatfd.c:21:
> /root/qemu/util/compatfd.c: In function 'qemu_signalfd':
> /root/qemu/util/compatfd.c:103:19: error: '__NR_signalfd' undeclared (first use in this function)
> ret = syscall(SYS_signalfd, -1, mask, _NSIG / 8);
> ^
> /root/qemu/util/compatfd.c:103:19: note: each undeclared identifier is reported only once for each function it appears in
> /root/qemu/rules.mak:59: recipe for target 'util/compatfd.o' failed
> make: *** [util/compatfd.o] Error 1
>
>
> I had configured it with :
>
> ../configure --target-list=x86_64-linux-user --static --cpu=aarch64
>
> And I'm on :
>
> Linux ubuntu-512mb-fra1-01 4.4.0-59-generic #80-Ubuntu SMP Fri Jan 6
> 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Do you have:
/usr/include/aarch64-linux-gnu/bits/syscall.h
In your system?
When cross compiling it is these sort of problems come from not having
the architecture specific development files. On Ubuntu you want
something like:
apt-get build-dep -a arm64 qemu
--
Alex Bennée
Thanks for your replies,
I've managed to compile it using a chroot as suggested by Peter. I just grabbed a pre-built rootfs from here : https://wiki.debian.org/Arm64Port#Pre-built_Rootfses, then installed qemu-user-static with apt-get and run the build from the chroot.
Somehow "apt-get build-dep -a arm64 qemu" didn't work, I had tried to do "dpkg --add-architecture arm64 && apt-get update" before running this command but it couldn't find the needed packages, not sure why.
In any case thanks for your help :)
this was an issue in my setup
Hello everyone!!
I am having a issue when build qemu using gcc aarch64-linux-gnu-* on ubuntu 16.04:
dong02@dong:~/qemu$ ./configure \
> --prefix=/usr --cross-prefix=/usr/bin/aarch64-linux-gnu- \
> --target-list=aarch64-softmmu \
> --enable-attr --enable-fdt --enable-kvm \
> --enable-sdl --enable-system --enable-tools \
> --audio-drv-list= \
> --disable-bluez --disable-brlapi --disable-bsd-user \
> --disable-cap-ng --disable-curl --disable-curses \
> --disable-docs --disable-libiscsi --disable-linux-aio \
> --disable-rbd --disable-seccomp --disable-slirp \
> --disable-sparse --disable-spice --disable-strip \
> --disable-usb-redir --disable-vde --disable-virtfs \
> --disable-vnc --disable-werror --disable-xen
ERROR: zlib check failed
Make sure to have the zlib libs and headers installed.
I installed zlib library: sudo apt-get install zlib1g-dev. However, result no change
Please help me!!
Hi Cao Van Dong,
you need to install zlib1g-dev:arm64, see:
https://github.com/qemu/qemu/blob/master/tests/docker/dockerfiles/debian-arm64-cross.docker
Regards,
Phil.
Cao Van Dong <email address hidden> writes:
> Hello everyone!!
>
> I am having a issue when build qemu using gcc aarch64-linux-gnu-* on
> ubuntu 16.04:
>
> dong02@dong:~/qemu$ ./configure \
>> --prefix=/usr --cross-prefix=/usr/bin/aarch64-linux-gnu- \
>> --target-list=aarch64-softmmu \
>> --enable-attr --enable-fdt --enable-kvm \
>> --enable-sdl --enable-system --enable-tools \
>> --audio-drv-list= \
>> --disable-bluez --disable-brlapi --disable-bsd-user \
>> --disable-cap-ng --disable-curl --disable-curses \
>> --disable-docs --disable-libiscsi --disable-linux-aio \
>> --disable-rbd --disable-seccomp --disable-slirp \
>> --disable-sparse --disable-spice --disable-strip \
>> --disable-usb-redir --disable-vde --disable-virtfs \
>> --disable-vnc --disable-werror --disable-xen
>
> ERROR: zlib check failed
> Make sure to have the zlib libs and headers installed.
>
> I installed zlib library: sudo apt-get install zlib1g-dev. However, result no change
> Please help me!!
You will have installed the x86 version of the zlib1g-dev libraries.
Unfortunately headers are not uniform across all architectures.
If you want to ensure you have all the appropriate headers for cross
compiling QEMU do:
apt-get build-dep -a arm64 qemu
But you may well run into problems if the distribution isn't fully
multi-arch clean. This is one of the reasons we use docker to isolate
our various cross build environments:
make docker-test-build@debian-arm64-cross J=9 TARGET_LIST=aarch64-softmmu
--
Alex Bennée
|