build hikey960 error

来自个人维基
2019年10月12日 (六) 09:59free6d1823讨论 | 贡献的版本

跳转至: 导航搜索

Host:Linux 4.4.0-142-generic #168-Ubuntu x86_64 x86_64 x86_64 GNU/Linux

Log:

dex2oatd E 09-23 23:04:07 174391 174391 dex2oat.cc:2234] Cannot lock profiles: Failed to lock file 'out/soong/hikey960/dex_bootjars/boot.prof': Bad file descriptor
dex2oatd E 09-23 23:04:07 174391 174391 dex2oat.cc:2842] Failed to process profile file ERROR: Dex2oat failed to compile a boot image.It is likely that the boot classpath is inconsistent.Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifier" to see verification errors.

Cause:
art/dex2oat/dex2oat.cc

bool LoadProfile() {
    ..
    if (profile_file_fd_ != -1) {
        profile_file = LockedFile::DupOf(profile_file_fd_, "profile", true /* read_only_mode */, &error);
    } else if (profile_file_ != "") {
        profile_file = LockedFile::Open(profile_file_.c_str(), O_RDONLY, true, &error);
    }
    // Return early if we're unable to obtain a lock on the profile.
    if (profile_file.get() == nullptr) {
        LOG(ERROR) << "Cannot lock profiles: " << error;
        return false;
    }
}

art/libartbase/base/scoped_flock.cc

ScopedFlock LockedFile::DupOf(const int fd, const std::string& path,
                              const bool read_only_mode, std::string* error_msg) {
  // NOTE: We don't check usage here because the ScopedFlock should *never* be
  // responsible for flushing its underlying FD. Its only purpose should be
  // to acquire a lock, and the unlock / close in the corresponding
  // destructor. Callers should explicitly flush files they're writing to if
  // that is the desired behaviour.
  ScopedFlock locked_file(
      new LockedFile(DupCloexec(fd), path, /* check_usage= */ false, read_only_mode));
  if (locked_file->Fd() == -1) {
    *error_msg = StringPrintf("Failed to duplicate open file '%s': %s",
                              locked_file->GetPath().c_str(), strerror(errno));
    return nullptr;
  }
  if (0 != TEMP_FAILURE_RETRY(flock(locked_file->Fd(), LOCK_EX))) {
    *error_msg = StringPrintf(
        "Ignore: Failed to lock file '%s': %s", locked_file->GetPath().c_str(), strerror(errno));
    return nullptr;
  }
 
  return locked_file;
 
}