【问题标题】:Is it possible to mix different versions of gcc and ld?是否可以混合使用不同版本的 gcc 和 ld?
【发布时间】:2012-05-15 04:30:36
【问题描述】:

我的环境是 arm-linux-androideabi(东芝 AC100 上的 Android 2.2)。我的环境有 2 套 GCC 编译器(安装在设备上的不同位置):

  1. 4.4.3 (Android NDK on Android)
  2. 4.6.0 (R + GCC on Android)

我面临的问题是 gcc-4.6.0 运行时会出现段错误(但是它成功运行每个任务,只是在最后出现段错误,可能在退出例程中),而 ld-4.4.3 和 ar-4.4 .3 无法在我的环境中运行。另一方面,gcc-4.4.3 运行良好,ld-4.6.0 和 ar-4.6.0 也是如此。

因此,在我的设备上构建时,如果我使用 4.4.3 运行配置,它将在配置步骤失败,因为即使配置测试程序编译成功,gcc 段错误并返回非零值(139 )。但是,如果我使用 4.6.0 运行配置,配置运行得很好,但构建 (make all) 在链接和静态库创建时惨遭失败。

我的问题是:

  1. 是否可以使用 gcc-4.4.3 编译我的目标文件 (gcc-4.4.3 -c input.c) 然后与 ld-4.6.0 (ld-4.6.0 -o input input.o -lc ) 链接?也就是说,我将删除有问题的二进制文件并使用工作二进制文件的组合来构建项目。
  2. 如果有警告,那么它们是什么?

【问题讨论】:

  • 没试过,但我想知道编译器会使用哪些库(头文件)以及链接器会链接哪些库。可能你必须告诉他们......
  • 一发布这个问题,我就意识到我可以尝试并看到。但是,正如您的评论所表明的那样,我需要研究很多警告。

标签: android gcc ld unix-ar


【解决方案1】:

您可以使用 shell 脚本调用 gcc,以隐藏错误的退出代码。

【讨论】:

  • 我已经这样做了。但是,它有一个缺点,即即使编译失败,gcc 包装器也会返回 true,因为退出代码始终是因分段错误 (139) 而返回的代码。
  • 也许您可以检查是否生成了可执行文件并返回成功,否则返回错误代码?当然,整个事情仍然是一个黑客......
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
相关资源
最近更新 更多