web-dev-qa-db-ja.com

libCorePlot-CocoaTouch.aファイルに必要なアーキテクチャx86_64がありません

Ray Wenderlichチュートリアル によると、私は次のことを行いました:

ステップ1-ダウンロードしましたCorePlot_1.4.Zip公式ウェブサイトに

ステップ2-プロジェクトにCorePlotHeadersフォルダー静的ライブラリlibCorePlot-CocoaTouchを追加しました。 a(チェック「コピー先グループのフォルダにアイテムをコピー(必要な場合)」

ステップ3-Other Linker Flags field以下に追加しました:-ObjC

手順4-Link Binary with Libraries if libCorePlot-CocoaTouch.aおよびQuartzCoreフレームワークはここにありました

結果:プロジェクトをコンパイルすると、Iphone Retina(4-Inch)を使用しているときに問題なく動作します。しかし、Iphone Retina(4-Inch 64-bit)を使用している場合、ビルドして実行しようとすると、次のメッセージが表示されます。

ld: warning: ignoring file /blah/blah/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /blah/blah/libCorePlot-CocoaTouch.a (3 slices)

ここに完全なメッセージ:

ld: warning: ignoring file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a (3 slices)
Undefined symbols for architecture x86_64:
"_CPTDecimalFromCGFloat", referenced from:
  -[PatientConstanteVisualiser configurePlots] in PatientConstanteVisualiser.o
  -[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_CPTDecimalFromInteger", referenced from:
  -[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTAxisLabel", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTColor", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTFill", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableLineStyle", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableTextStyle", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTPlotSymbol", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTScatterPlot", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTTheme", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTXYGraph", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_kCPTStocksTheme", referenced from:
  -[PatientConstanteVisualiser configureGraph] in PatientConstanteVisualiser.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

私はこの問題に数時間費やしました...助けてください...

19
Erzékiel

Core Plotの64ビットバージョンが必要な場合は、静的ライブラリの新しいバージョンをビルドする必要があります。 Arm64ビルドにはiOS 7が必要ですが、Core Plotは以前のバージョンもサポートしているため、ビルド済みライブラリは32ビットのみです。

開いた CorePlot-CocoaTouch.xcodeprojおよびアーキテクチャ設定を「標準アーキテクチャ(64ビットを含む)」に変更します。 「ユニバーサルライブラリ」ターゲットをビルドして、Core Plot 1.4に含まれているライブラリの代わりに結果の静的ライブラリを含めるか、代わりに依存プロジェクトのセットアップを使用します。

19
Eric Skroch

CorePlotは、Xcode 5.1で動作する1.5.1をリリースしました。 CorePlotHeadersフォルダーとlibCorePlot-CocoaTouch.aファイルをプロジェクトにコピーするだけです。

here からダウンロードできます。

14
Ojancano

試してください:

lipo -info libCorePlot-CocoaTouch.a

これは、ライブラリがarmv7、armv7s、i386(32ビットシミュレータ)用に構築されており、64ビットシミュレータは含まれていないことを示しています。 64ビットシミュレータ用のlibをビルドする必要があります。その後、lipoを使用して64ビットlibをlibCorePlot-CocoaTouch.aに追加できます。

出力:

Architectures in the fat file: libCorePlot-CocoaTouch.a are: armv7 armv7s i386

PS:iPhone 5Sでも動作しません(arm64なし)。

編集:

以下は、arm64アーキテクチャとx86_64アーキテクチャの両方を含むバイナリを生成するために必要な手順です。

  1. https://code.google.com/p/core-plot/downloads/detail?name=CorePlot_1.4.Zip&can=2&q= からCorePlot_1.4をダウンロードします
  2. CorePlot_1.4/Source/frameworkにあるXcodeプロジェクト(CorePlot-CocoaTouch.xcodeproj)を開きます。
  3. 「アーキテクチャ」には「標準アーキテクチャ」、「ベースSDK」には「最新iOS(iOS 7)」を選択します
  4. ライブラリをビルドする(CMD + B)
  5. ターミナルでCorePlot_1.4/Source/build /に移動します
  6. Lipo -createを実行します。/Debug-iphoneos/libCorePlot-CocoaTouch.a./Debug-iphonesimulator/libCorePlot-CocoaTouch.a -output core_plot_all.a
  7. 新しく作成したlib(core_plot_all.a)をプロジェクトに追加します
  8. あなたは行く準備ができています
13
Ivan Genchev

xcodeのアーキテクチャの設定を変更する

enter image description here

6
codercat

プロジェクトのダウンロードとビルドのプロセスを実行したくない場合は、ユニバーサルライブラリ(armv7、armv7s、arm64用)と ここに置く をビルドしました。

これは、coreplot commit id cc0a18cef8915f4a11e0699e9429c0a2f0018b42から構築されています。

5
James Whong

Xcode7.3 + CocoaPodでも同じエラーが発生しました。その他のリンカーフラグ= $(inherited)の問題を修正しました。

もちろん、この設定はCocoaPodでのみ有効です。

0
kmugitani

上記すべてを試しても動作しない場合は、「ビルド設定」またはプロジェクトターゲットで-ObjC -lCorePlot-CocoaTouchを「その他のリンカーフラグ」に設定してみてください。

0
firebear

Xcode 7.2.1とiOS SDK 9.2の公式ドキュメント ' sing Core Plot In an Application 'に従いました。 「-OjbC」に加えてリンカーフラグ「-lCorePlot-CocoaTouch」を追加するまで、.aがarm64をサポートしている場合でも同じエラーが発生しました。

0
firebear

私にとって最も簡単な解決策:プロジェクト>ビルド設定>アーキテクチャに移動します。以下の画像に示すように、アーキテクチャをarmv7に変更し、armv6などのように他のものを削除します。

Change required

0
shubham mishra