【发布时间】:2012-12-29 07:57:56
【问题描述】:
根据文献,A6 处理器将执行 ARMv7 代码。我的项目链接失败,因为库是为 ARMv7 构建的,但应用程序是为 ARMv7s 构建的。
典型的消息是(当我连接 iPad 4 (Retina) 或 iPhone 5 时):
ld: warning: ignoring file /usr/local/ssl/iphoneos/lib//fipscanister.o, file was built for armv7 which is not the architecture being linked (armv7s): /usr/local/ssl/iphoneos/lib//fipscanister.o
ld: warning: ignoring file /usr/local/ssl/iphoneos/lib//libcrypto.a, file was built for archive which is not the architecture being linked (armv7s): /usr/local/ssl/iphoneos/lib//libcrypto.a
Undefined symbols for architecture armv7s:
"_FIPS_incore_fingerprint", referenced from:
_FINGERPRINT_premain in fips_premain.o
"_FIPS_signature", referenced from:
_FINGERPRINT_premain in fips_premain.o
"_FIPS_text_start", referenced from:
_FINGERPRINT_premain in fips_premain.o
ld: symbol(s) not found for architecture armv7s
我知道我可以通过从有效架构 (VALID_ARCHS) 中删除 ARMv7 来解决此问题,但我不确定为什么,因为 A6 处理器可以执行 A5 目标代码。或者我可以为 ARMv7s 架构执行额外的库构建,但这需要更多的工作并且需要不同的磁盘目录结构。
将 ARMv7 库与 ARMv7s 应用程序链接起来有什么魔力吗?
【问题讨论】:
-
我猜你的 lib 是为 (armv6 & armv7) 和主项目编译的 (armv7 & armv7s).. 只需将 lib 替换为 (armv7 & armv7s)...问题解决...!
-
处理器能够执行向后兼容的代码并不意味着链接器也可以处理生成代码的所有版本。要么为 armv7s 重新编译那个“FIPS”库,要么禁用 armv7s。
-
感谢@Raj - 不,我构建了一个库 - ARMv7(不是 ARMv6 和 ARMv7)。它是使用 iPhoneOS6.0 SDK 构建的。
-
感谢@H2CO3 - 从技术上讲,FIPS 对象模块(FIPS 库)和 FIPS Capable 库都是使用 ARMv7 构建的。 FIPS Capable 实际上是库,并使用来自 FIPS 对象模块的对象代码。抱歉学究了
-
感谢@H2CO3 - “要么为 armv7s 重新编译那个“FIPS”库,要么禁用 armv7s”。我试图避免这种情况,但我同意链接器可能存在知识差距。我想我会尝试在 BinUtils 邮件列表中找到问题的根源。