2011-12-27 8 views
5

私は非ARCコードとしての私のCocoaAsyncSocketコードのすべてをマークし、そしてそれは私にこれらの3つのエラーを与えています:アーキテクチャarmv7の未定義シンボルですか?このエラーは何を意味しますか?

Undefined symbols for architecture armv7: 
    "_kCFStreamNetworkServiceTypeVoIP", referenced from: 
     -[GCDAsyncSocket enableBackgroundingOnSocketWithCaveat:] in GCDAsyncSocket.o 
    "_kCFStreamNetworkServiceType", referenced from: 
     -[GCDAsyncSocket enableBackgroundingOnSocketWithCaveat:] in GCDAsyncSocket.o 
    "_kCFStreamPropertySSLSettings", referenced from: 
     -[GCDAsyncSocket maybeStartTLS] in GCDAsyncSocket.o 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

誰もがこれとどのように修正するかを知っていますか?

+7

あなたは 'CFNetwork'とリンクしていますか? –

答えて

4

コンパイルするコードの中には、定数 "kCFStreamNetworkServiceTypeVoIP"、 "kCFStreamNetworkServiceType"、および "kCFStreamPropertySSLSettings"が参照されていますが、使用するライブラリとコードをリンクしようとしたときにそれらの定数が見つかりませんでした。

残念ながら、これは可能性の理由の束があります:

  • あなたは正しいlibrarをリンクされない場合があります彼らはそのアーキテクチャ
  • のために#アウトifdef'dすることができ
  • それらをスペルミスしている可能性が(Y、IES)
  • 彼らは唯一おそらく他の理由
  • 宣言ライブラリ
  • で使用できるように、彼らは「隠された」可視性を持つものとしてマークすることができ

ライブラリのバイナリからエクスポートされたシンボルでは「nm」を使用し、バイナリがリンクしているライブラリをチェックするには「otool -L」を使用できます。

16

コードのコメントを見ることで解決策が見つかったと思いますが、Mark Adamsが上で提案したこともここにあります。ターゲット - >ビルド段階 - >リンクバイナリ - ライブラリ - > Select CFNetwork.framework

+2

これは正しい答えです、CFNetwork.frameworkがありません –

+0

ありがとう、DuneCat! :-) –

+0

@DuneCatこれは役に立ちます。私は、あなたが手動でフレームワークを追加する必要があることを知らなかった。私は何とかすべてが既に含まれていると推測しました。リンクされたフレームワークとライブラリ - >プラス記号をクリック - >私のためにフレームワークを追加します。私はC#で同じタイプの間違いがありましたが、そこにはVisual Studioが通知します。私は思う...とにかく感謝します。 –

0

LineaPro APIをアプリケーションに統合するときに同じエラーが発生しました。

私が修正したのは、ExternalAccessory.frameworkをGeneral - > Linked FrameworkとLibrariesに追加することでした。

すでにCFNetwork.frameworkが含まれていました。

関連する問題