0

私はiPhoneアプリケーションを開発しています。私はXcodeに慣れていないので、ご容赦ください。iOS4.1デバイスSDKを持っています。[アクティブ...]ドロップダウンボックスで[シミュレーター]を選択すると、アプリケーションはエラーなしでコンパイルされ、iPhoneシミュレーターで実行されます。

ただし、ドロップダウンボックスで[デバイス]を選択すると、重複するシンボルに関して次のリンカーエラーが発生します。

Ld build/PineCone.build/Debug-iphoneos/PineCone.build/Objects-normal/armv6/PineCone normal armv6
cd /Users/isaacsutherland/fydp/PineCone/PineCone
setenv IPHONEOS_DEPLOYMENT_TARGET 4.1
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.1.sdk -L/Users/isaacsutherland/fydp/PineCone/PineCone/build/Debug-iphoneos -L/Users/isaacsutherland/fydp/PineCone/PineCone/../3rd/libGHUnitIPhone -F/Users/isaacsutherland/fydp/PineCone/PineCone/build/Debug-iphoneos -filelist /Users/isaacsutherland/fydp/PineCone/PineCone/build/PineCone.build/Debug-iphoneos/PineCone.build/Objects-normal/armv6/PineCone.LinkFileList -dead_strip -all_load -ObjC -miphoneos-version-min=4.1 -framework Foundation -framework UIKit -framework CoreGraphics /Users/isaacsutherland/fydp/PineCone/3rd/three20/Build/Products/Debug-iphoneos/libThree20.a /Users/isaacsutherland/fydp/PineCone/3rd/three20/Build/Products/Debug-iphoneos/libThree20Core.a /Users/isaacsutherland/fydp/PineCone/3rd/three20/Build/Products/Debug-iphoneos/libThree20Network.a /Users/isaacsutherland/fydp/PineCone/3rd/three20/Build/Products/Debug-iphoneos/libThree20Style.a /Users/isaacsutherland/fydp/PineCone/3rd/three20/Build/Products/Debug-iphoneos/libThree20UI.a /Users/isaacsutherland/fydp/PineCone/3rd/three20/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/isaacsutherland/fydp/PineCone/3rd/three20/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework QuartzCore -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -lz.1.2.3 /Users/isaacsutherland/fydp/PineCone/ClientDal/build/Debug-iphoneos/libClientDal.a -lGHUnitIPhone4_0 -o /Users/isaacsutherland/fydp/PineCone/PineCone/build/PineCone.build/Debug-iphoneos/PineCone.build/Objects-normal/armv6/PineCone

ld: duplicate symbol _RedirectionLimit in /Users/isaacsutherland/fydp/PineCone/ClientDal/build/Debug-iphoneos/libClientDal.a(libASIHTTPRequest.a-armv6-master.o) and /Users/isaacsutherland/fydp/PineCone/ClientDal/build/Debug-iphoneos/libClientDal.a(libASIHTTPRequest.a-armv6-master.o)
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

_RedirectionLimitが同じファイルで2回見つかったと文句を言うので、エラーは奇妙です!libClientDal.a(libASIHTTPRequest.a-armv6-master.o)問題のあるライブラリです。誰かが私が何が起こっているのか理解するのを手伝ってもらえますか?そもそも、このライブラリはどのようにして適切にコンパイルできたのでしょうか。または、リンカが同じライブラリを2回インクルードしようとしているのでしょうか。

この同様の質問で提供される回避策は、私には機能しません。

さらに情報が必要な場合は、喜んで提供します。前述したように、私はXcode開発に不慣れです。

4

3 に答える 3

5

静的ライブラリにコンパイルして相互に参照するプロジェクトのWebがある場合、考慮しなければならない2つの明確な懸念事項があります。

  • プロジェクトの直接依存関係は、どのプロジェクトが相互に依存しているかをXcodeに通知するため、依存関係が変更されたときにプロジェクトを再コンパイルすることがわかります。

  • プロジェクトのリンクライブラリは、実際にはそのオブジェクトコードに含まれています。

一言で言えば、直接依存関係のWebは必要に応じて絡み合うことができますが、各プロジェクトのコードをアプリケーション実行可能ファイルに1回だけリンクするように注意する必要があります。

基本的に、私の問題は、3つのプロジェクトA、B、およびCがあり、依存関係がA => B、A => C、B=>Cのように見えることでした。libC.aをAとBの両方にリンクしていたので、リンカーが重複コードについて文句を言いました。

変更する必要のある構成は、各プロジェクトのターゲットの[ターゲット情報]ページにあります。

于 2010-10-19T08:51:40.900 に答える
2

これは、-all_loadリンカーフラグを使用したときに発生しました。これにより、リンカーはすべてのライブラリからすべてのシンボルをロードします。Three20プロジェクトでは、これを使用する必要があると言われています。そうしないと、カテゴリが読み込まれず、実行時例外が発生するためです。そのフラグを削除し、それを必要とするライブラリ(Three20ライブラリ)ごとに-force_loadフラグを追加しました。参照:-all_loadリンカーフラグは何をしますか?

于 2011-01-13T15:25:44.640 に答える
0

ASIとTBXMLを利用する小さなカスタムライブラリを埋め込む必要のあるアプリがいくつかあります。このアプリの中には、独自のバージョンのライブラリを備えているものがあります。シンボルの重複の問題を回避するために、各ライブラリのターゲットを複製して、問題の原因となっている.mファイルを削除しました。それが役に立てば幸い。

于 2011-11-21T13:18:29.367 に答える