自学内容网 自学内容网

Android.bp编译报错

[100% 3/3] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/soong/build.ninja Android.bp
Clang SA is not enabled
error: external/test_prog/Android.bp:1:1: dependency "libc++fs" of "test_prog" missing variant:
  os:android, image:vendor.30, arch:arm64_armv8-a, sdk:, link:static, version:
available variants:
  os:android, image:, arch:arm64_armv8-a, sdk:, link:static, version:
  os:android, image:, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:static, version:
  os:android, image:recovery, arch:arm64_armv8-a, sdk:, link:static
  os:linux_glibc, arch:x86, link:static
  os:linux_glibc, arch:x86_64, link:static
  os:windows, arch:x86, link:static
  os:windows, arch:x86_64, link:static
17:10:46 soong bootstrap failed with: exit status 1
  1. 背景
    这个错误是由于在.bp文件中引用了libc++fs库,同时这个模块声明了vendor: true属性,但libc++fs不支持vendor使用。
    libc++fs这个库是external/libcxx中的一个模块,默认编译方式不允许vendor使用(Android11上C++版本较低,filesystem尚未正式标准化)
cc_binary {
    name: "test_prog",
    vendor: true,
    static_libs: [
        // "libc++experimental",
        "libc++fs",
    ],
    ...
}
  1. 分析编译报错:
    提示:编译模块test_prog依赖libc++fs,缺少可用的版本类型(variant),所需的类型已注明。这个是期望类型。
error: external/test_prog/Android.bp:1:1: dependency "libc++fs" of "test_prog" missing variant:
  os:android, image:vendor.30, arch:arm64_armv8-a, sdk:, link:static, version:

同时,提示当前可用版本类型(available variants),每行是一个类型。

available variants:
  os:android, image:, arch:arm64_armv8-a, sdk:, link:static, version:
  os:android, image:, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:static, version:
  os:android, image:recovery, arch:arm64_armv8-a, sdk:, link:static
  os:linux_glibc, arch:x86, link:static
  os:linux_glibc, arch:x86_64, link:static
  os:windows, arch:x86, link:static
  os:windows, arch:x86_64, link:static
  1. 确认可用类型
    查找编译目录,找到以下几种平台类型的静态库。前面几种arm类型的都能对应上,x86平台的只编译出来linux_glibc_x86_64_static版本,这个是和当前PC编译环境对应的,其他3中x86类型缺失是由于当前环境下不具备编译条件。
out/soong/.intermediates/external/libcxx/libc++fs$ find . -name *.a
./android_arm64_armv8-a_static_cfi/libc++fs.a
./android_arm_armv7-a-neon_cortex-a9_static/libc++fs.a
./android_recovery_arm64_armv8-a_static/libc++fs.a
./android_arm64_armv8-a_static/libc++fs.a
./linux_glibc_x86_64_static/libc++fs.a
  1. 定位问题
    把“期望类型”和“已有类型”对比差异,逐个字段比较,看缺少哪项。
    这个例子中发现缺少:image:vendor.30。可以通过libc++fs库对应的.bp文件进行确认。
cc_defaults {
    name: "libc++ defaults",
    host_supported: true,   // <<---------编译PC主机的对应版本,linux_glibc_x86_64_static
    ...
}

cc_library_static {
    name: "libc++_static",
    defaults: ["libc++ defaults"],
    vendor_available: true,  // <<---------libc++的静态库vendor可用
    ...
}

cc_library_shared {
    name: "libc++",
    host_supported: true,
    vendor_available: true,  // <<---------libc++的动态库vendor可用
    ...
}

cc_library_static {
    name: "libc++fs",
                             // <<---------无vendor_available选项,vendor不可用
    recovery_available: true,
    defaults: ["libc++ defaults"],  // <<---------继承defaults选项,会编译pc host对应的版本,linux_glibc_x86_64_static
    ...
}
  1. 练习题
    以下这个错误是什么原因?试着分析一下
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -
n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/so
ong/build.ninja Android.bp
Clang SA is not enabled
error: external/test_prog/Android.bp:1:1: dependency "vhal_v2_0_common_headers" of "test_prog" missing variant:
  os:android, image:, arch:arm64_armv8-a, sdk:, version:
available variants:
  os:android, image:vendor.30, arch:arm64_armv8-a, sdk:, version:
  os:android, image:vendor.30, arch:arm_armv7-a-neon_cortex-a9, sdk:, version:
error: external/test_prog/Android.bp:1:1: dependency "android.hardware.automotive.vehicle@2.
0-manager-lib" of "test_prog" missing variant:
  os:android, image:, arch:arm64_armv8-a, sdk:, link:shared, version:
available variants:
  os:android, image:vendor.30, arch:arm64_armv8-a, sdk:, link:shared, version:
  os:android, image:vendor.30, arch:arm64_armv8-a, sdk:, link:static, version:
  os:android, image:vendor.30, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:shared, version:
  os:android, image:vendor.30, arch:arm_armv7-a-neon_cortex-a9, sdk:, link:static, version:
17:47:58 soong bootstrap failed with: exit status 1


原文地址:https://blog.csdn.net/yinminsumeng/article/details/140641399

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!