【问题标题】:Unable to build static library for arm6/arm7 using sourcery lite edition toolchain, C++, Eclipse on Mac OS?无法在 Mac OS 上使用 sourcery lite 版工具链、C++、Eclipse 为 arm6/arm7 构建静态库?
【发布时间】:2013-08-24 18:02:15
【问题描述】:

我一直在尝试在 Mac OS 上使用 C++、Eclipse 和 Sourcery Lite 版 ARM 工具链为 arm6/arm7 开发静态库 (.a)。我已经成功地为 Eclipse 设置(编译/构建/配置)sourcery lite 工具链,并且能够为 arm9 构建静态库而没有任何错误。不知何故,它不会为 arm6/arm7 编译/构建。我不知道为什么?我收到以下编译时错误: “所选处理器不支持 ARM 模式‘bx lr’”同样的代码适用于 arm9。

但是当我使用“lip -info”检查构建的静态库时,它会显示“lipo:没有架构规范的存档:libHelloCppLib.a(无法确定它的架构)”。我也无法在我的 iPhone 应用程序中使用该库。 有人可以帮忙吗?这有什么问题?谢谢。

【问题讨论】:

  • 谷歌查找错误文本,上面有很多主题。
  • 是的,在发布之前我已经用谷歌搜索了很多。但没有找到“如何在 Mac 上使用 Sourcey、C++ 和 Eclipse 构建 arm6/7 静态库,Mac 上的 lipo 可以识别为 arm 架构”的答案。相信我。
  • 您确定要使用 arm6/7 吗?那些很古老?也许你的意思是 armv6 和 armv7。但是你说 arm9,我不太确定,因为没有 v9。我相信 iPhone 内核都是 armv7-a 但肯定不是 arm7。
  • 啊,我看到原来的 iPhone 和 3G 有 arm11 内核(即 armv6)。
  • @ams 是的,我指的是 iOS 目前支持的 armv6 和 armv7/s。我提到了 arm6,因为在“目标处理器”(sourcery g++ lite)列表中它显示的是 arm6/7 而不是 armv6/v7。无论如何,我想让它与 iPhone 兼容。很抱歉造成混乱。

标签: c++ eclipse macos armv7 codesourcery


【解决方案1】:

适用于 Linux 的 Sourcery CodeBench 支持 armv4、armv5 和 armv7。 v5 设置在 v6/v7 硬件上应该可以正常工作。

如果您使用的是非 Linux 版本(“EABI”),那么您有 armv4、armv6-M 和 armv7。我不确定“v6-M”multilib 是否适合您(适用于微控制器);在这种情况下,您可能会使用 v4 做得更好。

可以指定官方支持以外的架构(例如-march=armv6),编译器会做正确的事情(可能),但因为它不附带支持库为那些 (libgcc.a) 构建的它必须使用它拥有的一个(很可能是 v4 那个),并且您可能会遇到链接错误。试试看:)

顺便说一句,如果您使用的是“Sourcery G++”,听起来您不是最新版本。几年前,它一直被称为“Sourcery CodeBench”。

【讨论】:

  • 非常感谢。我在 Mac Mountain Lion 上使用“Sourcery Codebench Lite Edition For ARM EABI”(mentor.com/embedded-software/sourcery-tools/sourcery-codebench/…)。我已经下载了源代码 (.tar) 并在此链接 (gnuarmeclipse.livius.net/wiki/Toolchain_installation_on_OS_X) 的帮助下构建它。它已成功构建。
  • 当我选择“目标处理器”= arm7 时,它会添加编译器标志“-mcpu=arm7”,但会出现编译错误。根据您的帮助,当我手动添加标志“-march=armv7”时,它现在可以成功编译,但会引发“开关重复警告”。
  • 即使使用其他“目标处理器”,例如cortex A8 和 cortex A9,它已成功编译/构建,零错误/警告。但是当我为那个 .a 库执行命令“lipo -info”时,它会显示“lipo:没有架构规范的存档:libHelloCppLib.a(无法确定它的架构)”。如果我忽略上述错误并将其用于 iPhone 代码,那么它会显示“架构未知且未找到参考”链接器错误。希望这将有助于更多地了解问题。
  • 您可能需要在存档上运行ranlib 以填写符号表。我不知道为什么它一开始就没有这个? ar 默认添加表格。
  • 至于 -march 问题,您应该在任何地方都有“arm7”,因为那是错误的。此外,您可能需要-march=armv7-a,因为您需要适用于 iPhone 的 v7 的a 变体。如果您说-mcpu=cortexa8(或a9),则不需要-march 标志。我认为重复警告是由构建系统添加一个标志引起的,然后您手动添加另一个。
猜你喜欢
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2011-07-12
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
相关资源
最近更新 更多