web-dev-qa-db-ja.com

アーキテクチャx86_64のXcode 9未定義シンボル

xcode 9に切り替えた後、エラーが発生します。このように見えます。

enter image description here

プロジェクト名とクラス名を空白にしましたが、.oサフィックスで終わるクラスのリストがあります。 Xcode 8.3.2では、すべてが機能します。私は2つのプロジェクトを手に入れました。1つは問題なく構築されているライブラリです。別のプロジェクトはテストアプリで、Podfileの:pathディレクティブによってライブラリを指します。両方のプロジェクトのビルド設定->アーキテクチャが標準のアーキテクチャに設定され、アクティブなアーキテクチャのビルドのみがDEBUGに設定されます:はい、リリース:いいえ。この問題に遭遇しましたか?助けてくれてありがとう。

8
Jozef Vrana

プロファイリング用のビルドを実行したときは機能していましたが、クラシックビルドではエラーが発生していました。ログを検索した後、フラグ、特に-fprofile-instr-generateで奇妙な動作があるようです。ソリューションは、ライブラリプロジェクトのビルド設定で[コードカバレッジを有効にする]フラグを[いいえ]に設定することでした。これは暗闇の中で撮影していましたが、どういうわけか機能しました。

0
Jozef Vrana

同様の問題が発生しました。誰にも役立つ場合に備えて、ここに投稿してください。

アプリのObjective-cクラスのフレームワーク(Swift 3および自分で作成)のクラスAbcService)を使用していたB. Xcode8/Swift3からXcode9/Swift4にアップグレードした後、リンク中のこのクラスのUndefined symbolsエラーのため、release configのアーカイブの構築に失敗しました。

Undefined symbols for architecture arm64:
   "_OBJC_CLASS_$__TtC15XxxabcServices17AbcService", referenced from:

奇妙なことに、debug configをアーカイブし、エミュレーターで実行するためにうまく機能しました。

根本原因を見つけるためにほぼ1日費やしました:フレームワークのSwift classAbcServiceが欠落していました- public修飾子。

7
Wei WANG

ここでの簡単なトリック:移動->フォルダ "/ Library/Developer/Xcode"に移動派生データを削除し、次にプロジェクトをクリーンにしてから実行します。

5
PrasannaKumar

Cocoapodsを使用しているので、おそらくそれらを更新する必要があります。

つまり、pod updateプロジェクトのディレクトリ内のコマンドラインで、Xcodeでプロジェクトを再構築します。

一般に、Xcodeの新しいメジャーバージョンを使用する場合、すべてのコンポーネントを再構築する必要があります。エラーメッセージは、あなたがすでに持っているオブジェクトファイル(* .oファイルは基本的にコンパイラがソースファイルから生成するものです)が新しくコンパイルされたオブジェクトファイルと互換性がないことを伝えています(あなたのケースで不平を言っているリンカはすべてのオブジェクトファイルを結合または「リンク」する目的)。

派生データ(Xcodeのキャッシュなど)を消去する必要がある場合があります。これを行うには、XcodeのProductメニューに移動し、Option/Altキーを押しながら、メニュー項目「クリーンビルドフォルダー」を選択します。

0
Thomas Krajacic