a. d2000台式机上anbox宿主机端程序编译问题修改记录
环境:bitcomet比特彗星版本
anbox宿主机编译流程见另外一篇文章
问题1
proj156_vendor_anbox/external/cpu_features/test/filesystem_for_testing.cc:48:15: error: use of old-style cast to ‘int’ [-Werror=old-style-cast]
解决办法
修改external/CMakeLists.txt文件,增加set(BUILD_TESTING OFF)或者将add_subdirectory(cpu_features)改为add_subdirectory(cpu_features EXCLUDE_FROM_ALL)
问题2
proj156_vendor_anbox/external/cpu_features/src/cpuinfo_aarch64.c:103:3: error: switch missing default case [-Werror=switch-default]
解决办法
修改external/CMakeLists.txt文件,增加set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error")
问题3
proj156_vendor_anbox/external/cpu_features/include/cpuinfo_x86.h:205:2: error: #error "Including cpuinfo_x86.h from a non-x86 target."
比特彗星默认设置目标平台为x86
解决办法
修改src/anbox/cmds/check_features.cpp文件,
+#if defined(CPU_FEATURES_ARCH_X86)
#include "cpuinfo_x86.h"
+#endif
修改src/anbox/cmds/system_info.cpp文件,
+#if defined(CPU_FEATURES_ARCH_X86)
#include "cpuinfo_x86.h"
+#endif问题4
proj156_vendor_anbox/src/anbox/graphics/program_family.cpp:40:20: error: ‘runtime_error’ is not a member of ‘std’
解决办法
修改src/anbox/graphics/program_family.cpp,增加#include <stdexcept> 头文件。
问题5
proj156_vendor_anbox/src/anbox/input/manager.h:36:8: error: ‘uint32_t’ in namespace ‘std’ does not name a type;
解决办法
修改src/anbox/input/manager.h,增加#include <cstdint> 头文件。
修改后完成编译,在build/src/目录下生成anbox可执行文件。搭建临时环境,初步测试比特彗星版本anbox:
sudo systemctl stop anbox-container-manager.service
sudo ln -s /dev/binderfs/anbox-binder /dev/binder
sudo ln -s /dev/binderfs/anbox-hwbinder /dev/hwbinder
# 运行Anbox的Session Manager
./anbox session-manager --standalone --experimental //--standalone --experimental 这两个参数是阻止容器管理器启动默认容器,允许用户使用实验功能。
查看/run/user/1000/目录下,生成了anbox目录以及子目录input下的event文件和sockets目录下的qemu_pipe文件。
初步验证编译出的anbox可执行程序成功创建event0、event1、event2和anbox_audio、anbox_bridge、qemu_pipe。
供后续docker启动android时将文件映射进android系统,从而完成android系统和宿主机之间的通信链路的建立。