NDK-r25交叉编译qemu-7.0.0 第651步报错

在尝试编译QEMU 7.0.0时遇到了错误,主要问题在于`virtio_types.h`中`uint64_t`的宏定义与系统头文件中的定义冲突,以及`android_get_application_target_sdk_version`和`android_get_device_api_level`函数声明不符合C语言的原型要求。尝试修改QEMU源代码中的宏定义未解决问题,因为NDK-r25的系统头文件仍然导致冲突。解决方案可能需要深入理解QEMU和Android NDK的头文件包含机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.报错内容如下:

[651/2712] Compiling C object libqemuutil.a.p/util_vhost-user-server.c.o
FAILED: libqemuutil.a.p/util_vhost-user-server.c.o 
aarch64-linux-android33-clang -Ilibqemuutil.a.p -I. -I.. -Isubprojects/libvhost-user -I../subprojects/libvhost-user -Iqapi -Itrace -Iui -Iui/shader -I/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -I/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/glib-2.0 -I/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/glib-2.0/include -I/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/gio-unix-2.0 -I/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/pixman-1 -fcolor-diagnostics -Wall -Winvalid-pch -std=gnu11 -O2 -g -isystem /home/dubu/myinstall/qemu-7.0.0/linux-headers -isystem linux-headers -iquote . -iquote /home/dubu/myinstall/qemu-7.0.0 -iquote /home/dubu/myinstall/qemu-7.0.0/include -iquote /home/dubu/myinstall/qemu-7.0.0/disas/libvixl -iquote /home/dubu/myinstall/qemu-7.0.0/tcg/aarch64 -pthread -Wno-unused-function -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -Wno-psabi -fstack-protector-strong -fPIE -Wno-unused-function -MD -MQ libqemuutil.a.p/util_vhost-user-server.c.o -MF libqemuutil.a.p/util_vhost-user-server.c.o.d -o libqemuutil.a.p/util_vhost-user-server.c.o -c ../util/vhost-user-server.c
In file included from ../util/vhost-user-server.c:10:
In file included from /home/dubu/myinstall/qemu-7.0.0/include/qemu/osdep.h:82:
In file included from /home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdint.h:32:
In file included from /home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wchar_limits.h:36:
In file included from /home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/cdefs.h:373:
/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/api-level.h:174:47: warning: this function declaration is not a prototype [-Wstrict-prototypes]
int android_get_application_target_sdk_version() __INTRODUCED_IN(24);
                                              ^
                                               void
/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/api-level.h:194:33: warning: this function declaration is not a prototype [-Wstrict-prototypes]
int android_get_device_api_level() __INTRODUCED_IN(29);
                                ^
                                 void
In file included from ../util/vhost-user-server.c:12:
In file included from /home/dubu/myinstall/qemu-7.0.0/include/qemu/vhost-user-server.h:20:
In file included from /home/dubu/myinstall/qemu-7.0.0/include/standard-headers/linux/virtio_blk.h:31:
/home/dubu/myinstall/qemu-7.0.0/include/standard-headers/linux/virtio_types.h:44:19: error: typedef redefinition with different types ('uint64_t' (aka 'unsigned long') vs '__u64' (aka 'unsigned long long'))
typedef uint64_t  __virtio64;
                  ^
/home/dubu/myinstall/android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/virtio_types.h:24:25: note: previous definition is here
typedef __u64 __bitwise __virtio64;
                        ^
2 warnings and 1 error generated.
ninja: build stopped: subcommand failed.
make: *** [Makefile:163:run-ninja] 错误 1
 

 2.修改方法可参考如下连接

http://t.csdn.cn/lJbnw

这里要把qemu目录下的头文件virtio_types.h的宏定义修改为_UAPI_LINUX_VIRTIO_RING_H。

如果把$SYSROOT/usr/include/linux(即NDK-r25)下的头文件 virtio_types.h宏定义修改为_LINUX_VIRTIO_TYPE_H问题还是存在的。这个我不知道为什么?有大神的话清赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值