1

文献によると、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 アプリケーションにリンクする魔法はありますか?

4

1 に答える 1

1

Xcode メーリング リストの Jim Grosbach から、リンカ スイッチでリンクを続行-allow_sub_type_mismatchesできるようにする必要があります。ldそしてAppleのldmanページから:

 -allow_sub_type_mismatches
             Normally the linker considers different cpu-subtype for ARM
             (e.g. armv4t and armv6) to be different different architec-
             tures that cannot be mixed at build time.  This option
             relaxes that requirement, allowing you to mix object files
             compiled for different ARM subtypes.

と呼ばれる環境変数の詳細を示すChangelog エントリもありますLD_ALLOW_CPU_SUBTYPE_MISMATCHES

-allow_sub_type_mismatchesただし、 Xcode 4.5.2 では動作しないことがわかりました。Web を検索すると、いくつかの Apple RADAR が-allow_sub_type_mismatches. たとえば、rader://6134468 を参照してください。

今では修正されていることを願っていますが、Apple とその欠陥のあるソフトウェアに関しては、私を驚かせるものは何もありません。

于 2013-01-25T00:36:54.813 に答える