gcc - 可以在没有自由的情况下构建 binutils 吗?或者report_times可以禁用吗?

标签 gcc compiler-construction compiler-errors android-ndk cross-compiling

TLDR:在 gcc 的跨 native 构建中出现 fatal error “无法获得处理时间”。我可以从 gcc.c 中删除 report_times 代码还是使用 gcc 命令行选项禁用 report_times 或者在没有 libiberty 的情况下构建 gcc(其中包含 report_times 使用的 pex_get_times

详情
在解决了各种问题之后,我(最终)成功地使用了 Android NDK 独立工具链来构建 binutils 2.23 和 gcc 4.70。

我目前的问题是让它在我的设备上运行。

我写了一个标准的“hello world”(从这里复制)来在我的设备上测试 gcc。当我运行时:

arm-linux-eabi-gcc hello.c -o 你好
或者:
arm-linux-eabi-gcc hello.c

我收到以下错误:

arm-linux-eabi-gcc: fatal error :无法获取进程时间:没有这样的文件或目录。

除了 gcc.c 源的链接外,谷歌没有返回太多。检查源代码,我在一个名为 report_times 的函数(模块?扩展?)中发现了错误。函数(模块?扩展?)pex_get_times....我猜它会返回错误,如果它无法获得处理时间。

pex_get_times 函数(模块?扩展?我不确定它是什么)在 libiberty 中定义。我可以使用 --disable-build-libiberty,但它对主机(我的 NookHD)gcc 构建没有帮助。

我的问题:

  • gcc.c 的这一部分是否可以安全(且轻松)删除...即report_times 函数以及与之相关的所有内容?
  • 是否有命令行选项告诉 arm-linux-eabi-gcc 不要使用 report_times?
  • 有没有办法为 gcc 和 binutils 禁用主机/目标的 libiberty 构建,这会修复错误吗?

  • 与往常一样......我会在等待答案的同时继续研究。

    最佳答案

    在发布这个问题后大约一个小时发现了这个。也许两个。

    显然 report_times 是 GCC 调试符号 (?) 的一部分。要排除 report_times (这会导致原始问题中的“无法获取处理时间”),您必须构建非调试...或发布...版本的 gcc。

    为此,我使用了此链接中的信息:http://www-gpsg.mit.edu/~simon/gcc_g77_install/build.html

    但是,我从 LIBCXXFLAGS 和 LIBCFLAGS 中省略了 -g 并且我添加了没有 -g 的 LIBCPPFLAGS 以防万一。 Ran make DESTDIR=/staging/install/path install-host,打包并传输到设备。不再出现“无法获得处理时间”错误。

    我看到另一个错误,但它与这个问题无关

    关于gcc - 可以在没有自由的情况下构建 binutils 吗?或者report_times可以禁用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19344566/

    相关文章:

    C 编译器错误 - 初始值设定项不是常量

    c++ - 如何检测 gcc 5 的线程清洁剂

    c++ - GCC 4.8 正在反转可变参数模板参数包

    android - Android NDK 使用哪个编译器?

    java - 为什么不能将此字符串转换为整数?

    ios - Swift 编译器错误 : "Expression too complex" on a string concatenation

    调用模板化内部类静态成员函数的 C++ 语法?

    c++ - 如何确保函数在任何全局变量构造函数之前执行?

    C++ 编译器实现命名空间

    python - 设置用于在 Python 包中链接 C 代码的默认编译器