AndroidStudio 编译原生代码显示“fcntl(): Bad file descriptor”

Posted

技术标签:

【中文标题】AndroidStudio 编译原生代码显示“fcntl(): Bad file descriptor”【英文标题】:AndroidStudio compiling native code shows "fcntl(): Bad file descriptor" 【发布时间】:2020-10-02 11:25:07 【问题描述】:

我有一个旧版应用程序,一位开发人员在 androidStudio 中构建我们的原生 cpp 代码时看到了 fcntl(): Bad file descriptor

我们的构建环境支持使用本地安装的 NDK 以及通过 AndroidStudio 从命令行构建(用于编写脚本和执行日常自动构建)。我们设置local.properties 指向本地安装的NDK。

我无法确定fcntl 错误的原因,并且在运行 NDK r17 时自己没有看到它。然后我更新到 NDK r21d(2020 年 6 月)并立即在 AndroidStudio 中看到相同的内容

fcntl(): Bad file descriptor
[arm64-v8a] Compile++      : vhc_jnilib <= Png.cc
fcntl(): Bad file descriptor
[arm64-v8a] Compile++      : vhc_jnilib <= Jpeg.cc
fcntl(): Bad file descriptor
[arm64-v8a] Compile++      : vhc_jnilib <= MyContainer.cc
fcntl(): Bad file descriptor
[arm64-v8a] Compile++      : vhc_jnilib <= aIdentityInfo.cc
fcntl(): Bad file descriptor
[arm64-v8a] Compile++      : vhc_jnilib <= UpdateImage.cc
fcntl(): Bad file descriptor

Android Studio 4.0、MacOS Catalina 10.15.4、Gradle 6

问题:

知道如何获取有关生成此警告的工具的更多信息吗? 这意味着什么?能否将其静音或修复?

【问题讨论】:

在此处查看相关讨论:jira.appcelerator.org/browse/TIMOB-27776 这有什么更新吗?请告诉我.. @DeepDave 否,已更新到最新的 AndroidStudio 4.0.1,现在为 API 30 构建,但仍然看到相同的内容。 @spartygw 我删除了 NDK 代码。如果需要,我下次会使用 cmake Anton 提到的错误,说是在 2020 年 6 月修复。Closing ticket, Fix verified SDK version 9.0.3.v20200609060523 and SDK version 9.1.0.v20200609061322 但我今天仍然收到错误。 @spartygw 你找到解决方案了吗?谢谢 【参考方案1】:

项目路径不能有空格。

我也遇到过同样的问题,当我把项目路径中的空格去掉后,问题就解决了。

【讨论】:

谢谢,不适用于我。我的项目路径中没有空格。 确保检查您的驱动器名称,我的驱动器名称中有空格。删除它,现在一切正常! 2021年这怎么还是个问题!【参考方案2】:

我遇到了同样的问题。我不确定它的实际原因是什么,但我通过删除.gradle.cxxbuild 目录然后重建项目来解决它。

【讨论】:

对我来说没有变化。您使用的是哪个版本的 AndriodStudio 和 NDK? 我使用的是 Android Studio 4.1,NDK 版本:r21d (21.3.6528147),Gradle 版本:6.5,MacOS Catalina (10.15.7)。删除上述目录后,请尝试File 菜单下的invalidate caches/RestartBuild 菜单下的Refresh Linked C++ projects 刚刚尝试了无效和刷新,但仍然看到fcntl 错误【参考方案3】:

我在编译 tess-two 库时收到此警告已有一段时间了。我刚刚将我的 Android NDK 版本升级到最新版本 - 23.1.7779620 - 警告已经消失。因此,我建议遇到此问题的任何人都应该升级他们的 NDK。

【讨论】:

以上是关于AndroidStudio 编译原生代码显示“fcntl(): Bad file descriptor”的主要内容,如果未能解决你的问题,请参考以下文章

为啥编译时库模块中的包不存在,即使 Android Studio 显示代码中没有错误?

Android Studio 4.1.1“运行”不编译代码

LLDB:添加符号文件?

如何在 NDK 原生代码中获取断点并在 Android Studio 中调试原生代码?

在 Android Studio 中调试原生代码

AndroidStudio用Cmake方式编译NDK代码(cmake配置.a库)